AJAX聊天 - 防止垃圾邮件服务器端?

时间:2013-06-25 14:31:35

标签: php

任何人都可以在ajax聊天中使用简单的for循环,并使聊天有时发送1000条消息。 在我的ajax聊天中,每条消息都会以日期,时间(时间戳)存储。

我需要找到一种方法来防止这个问题,我已经考虑过了,但我不确定我该怎么做:

通过发布时间预防垃圾邮件

基本上选择5条消息表示其日期,时间显示不到10秒(一起)。 如果这些消息在不到10秒的时间内一起发布,则会阻止用户聊天几秒钟。

但我并不认为这可行,也不知道如何做到这一点。

是否有任何类似或更好的解决方案或提示如何?

2 个答案:

答案 0 :(得分:5)

编辑:DanFromGermany发布的解决方案是一个很好的方法,如果你有备用的数据库资源。如果数据库是瓶颈,您可以切换到以下方法:

你有一个对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说得太好。