0

首先,让我解释一下反垃圾邮件的概念:两个月前,我在我父亲的公司网站上遇到了一个问题。它有一个联系表格,但俄罗斯机器人开始经常向服务器的邮箱发送垃圾邮件(每天三到五封邮件)。我改进了验证码(更复杂的字体、不同的背景等),但这似乎不是一个永久的解决方案。机器人比我预期的要聪明一点。我开始阅读不同的反垃圾邮件概念并发现了“蜜罐法”。它工作了一段时间,但机器人在实施后的第一周就知道了该字段的名称。现在,每天早上我都必须打开 PHP 文件并为该隐藏字段想一个新名称。

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

1:删除 MySQL 数据库中所有记录的会话,超过 10 分钟。

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

3:如果会话是在不到 10 分钟前设置的,它只是更新它,将当前输出time()写入数据库。

4:如果没有 - 启动一个新会话并将其记录session_id()在 MySQL 中。

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

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

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

4

1 回答 1

1

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

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

经验: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

于 2016-03-03T15:49:40.017 回答