php - 蜜 jar 反垃圾邮件技术。如何为每个站点加载的隐藏字段随机生成一个名称?

标签 php mysql session captcha honeypot

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

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

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

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

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

4:如果没有 - 启动一个新 session 并在 MySQL 中记录它的 session_id()

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

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

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

最佳答案

查看 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

关于php - 蜜 jar 反垃圾邮件技术。如何为每个站点加载的隐藏字段随机生成一个名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776409/

相关文章:

mysql - 在 mysql ( zend_db ) 上构建一个 select distinct

php - 使用 laravel 删除功能删除记录时遇到问题

java - 如何将对象从 hibernate 状态拉出并放入内存中。我遇到 session 问题

session - 生成唯一 session ID 的最佳方法是什么?

php - Laravel:从应用程序注销/清除所有用户的所有 session

php - 将 php sql 结果从垂直转换为水平

php - 使用休息显示详细信息

mysql - 在rails应用程序中以root身份访问mysql数据库被拒绝

javascript - 为什么我使用 Vue.js 时搜索不起作用?

php - 连接注入(inject)故障排除