使用链接阻止表单提交的 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 最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章