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

Posted

技术标签:

【中文标题】使用链接阻止表单提交的 PHP 最佳实践?【英文标题】:PHP best practice for blocking form submissions with links? 【发布时间】:2013-08-02 14:33:39 【问题描述】:

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

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

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

我确信他们盲目地在任何表单上发帖,以为他们会成为博客评论,所以我们的联系我们表单陷入了混乱。

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

问题:查找 url 字符是隔离垃圾邮件提交的最佳方法,还是可以将 FILTER_SANITIZE_URL 用作触发拒绝的钩子?

【问题讨论】:

添加一个 nonce 作为隐藏表单字段,如果请求中的正确随机 nonce 没有随表单提交返回,则 bin 采取霰弹枪方法并从提交中删除所有html?如果没有 html,就不能有链接。 你使用 csrf 令牌吗? 目前只有 reCaptcha 和蜜罐。由于这些方法不起作用,因此正在寻找可以工作的下一个级别。我会研究Nonce。并且简单地删除 html 将无济于事,因为我们试图阻止任何包含 html 的提交,而不是删除 html 并允许发布。 【参考方案1】:

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

长度总和是最简单的检查方法,但它会切断所有不完全针对您的网站的自动漫游器。但如果这还不够,您可以创建更复杂的算法来计算校验和,然后对该 javascript 进行混淆处理,因此需要付出更多努力才能使这些机器人适应您的保护系统。

【讨论】:

【参考方案2】:
if (strstr($data,'http://')) 
    echo "contains link";

【讨论】:

【参考方案3】:

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

有几种方法可以解决这个问题。

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

此答案提供了有关此的更多信息。 How to create and use nonces

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

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

【讨论】:

我喜欢在 strstr 上使用 strip_tags,因为它似乎涵盖了更多潜在的情况。如果这失败了,我将回到学习随机数。感谢所有回复的人。

以上是关于使用链接阻止表单提交的 PHP 最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

Coldfusion 中的多步骤表单都有哪些最佳实践?

当前在 PHP 中防止电子邮件注入攻击的最佳实践是啥?

最佳实践:如何跟踪出站链接?

JSP/Servlet 环境的最佳实践 [重复]

在PHP中获取上传文件扩展名的最佳方法/实践是啥[重复]

spring security 手动登录最佳实践