任何人都可以在ajax聊天中使用简单的for循环,并使聊天有时发送1000条消息。 在我的ajax聊天中,每条消息都会以日期,时间(时间戳)存储。
我需要找到一种方法来防止这个问题,我已经考虑过了,但我不确定我该怎么做:
通过发布时间预防垃圾邮件
基本上选择5条消息表示其日期,时间显示不到10秒(一起)。 如果这些消息在不到10秒的时间内一起发布,则会阻止用户聊天几秒钟。
但我并不认为这可行,也不知道如何做到这一点。
是否有任何类似或更好的解决方案或提示如何?
答案 0 :(得分:5)
你有一个对phpfile的AJAX调用,比如说process.php。在process.php中,你启动一个会话,并启动一个值$ _SESSION ['lastChatMessage'] = 0;
然后你在实际代码中创建一个if / else:
// time based check:
if($_SESSION['lastChatMessage'] > time()-1 ){ echo "Only one post per second";}
else{
// some code you use now
$_SESSION['lastChatMessage'] = time();// save time of posting
}
您还可以创建一个$ lastChatMessage数组并记住每一次。然后创建一个删除小于time()的所有值的函数 - $ diffYouWant。 会留下一些帖子,取决于你希望这个数字有多大:)
if(count( $_SESSION['lastChatMessage']) > $maxPostsAllowed){ echo 'No flooding please';}
else{
// your code
}
答案 1 :(得分:3)
在脚本中服务器即将保存聊天消息的部分,您可以连接数据库查询,如
SELECT COUNT(*)
FROM chat_messages
WHERE uid='1234' AND timestamp > DATE_SUB(NOW(), INTERVAL 10 SECOND)
LIMIT 10
然后检查结果是否大于您的限制并返回false,或者显示消息“在太短的时间内发送了太多消息”
另一种可能更好的方法是不仅识别用户/会话,还将IP和限制消息保存到IP 。许多现代机器人可以很快地绕过会话或切换IP,因此您应该采用多种技术的组合。
还要考虑客户端防范,例如对邮件进行哈希处理,或者在邮件中添加校验和。很多机器人都不会把JavaScript说得太好。