快速简便的防洪?

VIV*_*NWO 10 php protection spam

我有一个站点,用户使用AJAX将消息提交给一个名为的文件like.php.在此文件中,用户消息将提交给数据库,然后将链接发送回用户.在我的Javascript代码中,我禁用了用户在提交AJAX请求时键入的文本框.

唯一的问题是,恶意用户可以不断向like.php我的数据库发送POST请求并泛洪.所以我想实施简单的防洪保护.

我真的不想要另一个数据库表记录用户IP等等的麻烦......好像他们充斥着我的网站会有很多数据库读/写速度慢下来.我想过使用会话,比如有一个包含每次发送数据时都会检查的时间戳的会话,like.php如果当前时间在时间​​戳之前让他们将数据添加到数据库,否则发出错误并阻止它们.如果允许他们在数据库中输入内容,请使用新的时间戳更新其会话.

你怎么看?这是最好的解决方法还是更容易的选择?

谢谢你的帮助.:)

Maj*_*our 7

会话是最容易实现的,并且开销也最小.您可以两位数据存储在会话中,最后发表的帖子的时间戳,以及后从与正在添加的IP.这是你如何检查合法性:

session_start();
if(isset($_SESSION['ip']) && $_SESSION['last_post'] + MININTERVAL < time()) die('too early');

$_SESSION['last_post'] = time();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
// store the message
Run Code Online (Sandbox Code Playgroud)

  • @devman不,这不是会议的工作方式.如果请求中没有会话cookie,即访问者发送的第一个请求,则会创建一个空会话,为此它不会"死".后续请求将有一个会话cookie,`session_start()`将导致`$ _SESSION`变量被上次分配给它的任何值填充 - 这是`last_post`和`ip`. (2认同)

Mat*_*iva 5

使用令牌.您生成令牌并将其添加到发起请求的页面.在like.php您验证请求是否包含有效令牌,这意味着它来自您的页面而不是外部直接POST.

  • 什么阻止某人查看页面一次,获取令牌,然后使用有效令牌自动执行请求/ POST? (3认同)
  • 这只是将脚本的POST循环转换为GET和POST循环. (2认同)