使用随机生成的令牌进行洪水控制

时间:2010-06-13 14:24:36

标签: php token protection flooding

我的网站的基本设置是:用户在主页上输入消息,点击进入,消息通过AJAX请求发送到名为like.php的文件,其中echo是一个被发送回用户的链接

当用户按下回车键时,我已经禁用了输入,但是没有什么能阻止用户不断地使用POST请求充满like.php并填满我的数据库。

有人告诉我使用令牌系统,但没有提到如何。我已经看到这是在我知道它有效之前完成的。

我唯一的问题是like.php将如何知道它是有效的令牌?我的代码目前是这样的:

$token = md5(rand(0, 9999) * 1000000);

和标记:

<input type="hidden" name="token" value="<?php echo $token ?>" />

将通过POST将令牌发送到like.php。但like.php将如何知道这是一个有效的令牌?我应该代替与用户相关联的东西吗?喜欢他们的IP地址?或者或许标记当前分钟并检查它是like.php ...

中的同一分钟

非常感谢任何关于这个问题的帮助,谢谢。 :)

3 个答案:

答案 0 :(得分:1)

最好的方法是使用会话变量,因为用户不能删除它们或像表单元素一样轻松地修改它们。或者更好的是,将IP地址和时间存储在数据库中,然后查看用户是否可以再次发布。

答案 1 :(得分:1)

不要重新发明轮子 - 只需查看此用户的最后评论时间,由user_id,user_ip定义,无论您拥有什么 - 并决定是否允许发布。

答案 2 :(得分:1)

对于大多数用户来说,一分钟似乎是一段时间太长而无法等待。标签式浏览,宽带互联网服务和用户tendency to not read every piece of text they're presented都会导致大量用户在不执行任何操作后很可能会感到无聊。

我肯定建议存储用户的IP地址。