蜜罐抗SPAM技术。如何为每个网站加载的隐藏字段随机生成名称?

时间:2016-03-03 15:34:36

标签: php mysql session captcha honeypot

首先,让我解释一下反垃圾邮件的概念:两个月前,我在我父亲公司的网站上遇到了问题。它有一个联系表格,但俄罗斯机器人开始经常垃圾邮件服务器的邮箱(每天三到五条消息)。我改进了验证码(更复杂的字体,不同的背景等),但这似乎不是一个永久的解决方案。机器人比我想象的要聪明一些。我开始阅读不同的反垃圾邮件概念,并找到了" honeypot method"。它工作了一段时间,但机器人在实施后的第一周就学会了该领域的名称。现在,每天早上我都要打开PHP文件并想一下该隐藏字段的新名称。

行。对于这个问题。我需要为该字段生成随机名称,但我需要一个如何操作的概念。现在我正在使用执行以下操作的PHP脚本:

1:删除MySQL DB中所有录制的会话,超过10分钟。

2:检查是否为当前用户设置了会话。

3:如果会话设置的时间少于10分钟,它只会更新它,将time()的当前输出写入数据库。

4:如果不是 - 启动一个新会话并在MySQL中记录它session_id()

我的MySQL表中有4列:id(PRIMARY KEY,记录的ID); sess_id(我把session_id()的输出放在哪里并用它来管理用户会话); session_started(包含time()的输出); tf_name(包含一个随机生成的字符串,稍后应该将其用作蜜罐字段的名称属性)。

一般来说,这个概念有效。但它限制用户在加载页面后不超过10分钟发送消息。我需要消除时间因素。

在我看来,其中一个解决方案是在网站加载时生成一个新的PHP会话,并在用户离开网站时关闭浏览器,点击外部链接等session_destroy()。但这似乎很难实现,因为我不想使用JavaScript(因此,不能使用onunload事件),事实上,无论你是否on onload事件都会触发单击外部链接或内部链接(或者您提交联系表单,这将为蜜罐字段生成新名称)。

1 个答案:

答案 0 :(得分:1)

查看已知为csrf或跨站点请求伪造的概念。在我看来,我相信这将是一个更实用的解决方案,而不是自己动手解决方案。

参考:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

Exp:https://github.com/smiegles/PHP-csrf-security-classes

我看到你已经在使用验证码,但机器人能够绕过它;使用更好的验证码:)。我个人幸运的两个验证码是那些需要简单数学答案(3+4)I am not a robot复选框的验证码。

参考:https://www.google.com/recaptcha/intro/index.html

参考:https://github.com/nettraction/Math_Captcha