使用链接阻止表单提交的PHP最佳实践?

时间:2013-08-01 15:14:18

标签: php bots spam

最近,为了发布链接(反向机器人),我们的表单中出现了大量的机器人帖子。

我们添加了reCaptcha只是为了发现它已被破解,机器人可以找出正确的响应。

我们添加了一个Honeypot字段,但发现这些提交的内容是在不使用该表单的情况下发布的。看起来第一个目录是必填字段的表单然后只提交那些,破解验证码并将其垃圾邮件发布到评论字段。

我确信他们盲目地发布任何形式,认为他们将成为博客评论,所以我们联系我们的表格会陷入困境。

如果内容包含链接,则下一步是阻止提交。这似乎是最好的逻辑方法,因为它的目标是作为阻止的触发器。

问题:查找网址字符是查找垃圾邮件提交的最佳方法,还是将FILTER_SANITIZE_URL用作触发拒绝的挂钩?

3 个答案:

答案 0 :(得分:0)

if (strstr($data,'http://')) {
    echo "contains link";
}

答案 1 :(得分:0)

只是扩展我的评论,因为有些人似乎认为它有价值。

有几种方法。

我建议在表单中添加一个nonce作为隐藏字段。当用户从您的站点请求表单时,会创建一个nonce,该nonce必须与该用户一起返回该表单,以使其成为有效的提交。

这个答案提供了更多相关信息。 How to create and use nonces

您还说要阻止包含任何html的所有条目。一个简单的方法是

if (strip_tags($string) !== $string)
    // Drop post as it had html in it

答案 2 :(得分:-1)

您可以传递一些校验和以及表单数据来验证它。 在客户端,在表单的“提交”事件中添加一个事件监听器,例如,您可以计算所有表单字段的长度总和,然后将其放在隐藏字段中。 在服务器端,以相同的方式计算校验和,并将其与隐藏字段中的内容进行比较。

长度总和是最简单的检查方式,但它会切断所有自动机器人,而不是完全针对您的网站。但是如果这还不够,你可以创建更复杂的算法来计算校验和,然后对这个javascript进行模糊处理,因此需要花费更多的精力来使这些机器人适应你的保护系统。