首先,让我解释一下反垃圾邮件的概念:两个月前,我在我父亲的公司网站上遇到了一个问题。它有一个联系表格,但俄罗斯机器人开始经常向服务器的邮箱发送垃圾邮件(每天三到五封邮件)。我改进了验证码(更复杂的字体、不同的背景等),但这似乎不是一个永久的解决方案。机器人比我预期的要聪明一点。我开始阅读不同的反垃圾邮件概念并发现了“蜜罐法”。它工作了一段时间,但机器人在实施后的第一周就知道了该字段的名称。现在,每天早上我都必须打开 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 事件)以及事实上,无论您单击外部链接还是内部链接(或者您提交一个联系表单,它将为蜜罐字段生成一个新名称)。