【问题标题】:Do spambots directly POST to server or fill out HTML forms? [closed]垃圾邮件机器人会直接 POST 到服务器或填写 HTML 表单吗? [关闭]
【发布时间】:2012-05-29 15:48:11
【问题描述】:

我正在考虑在我正在开发的网站上使用 Captcha(或 Recaptcha)的替代方法来填写注册表单。

我相信验证码会对用户体验产生负面影响。我正在研究使用隐藏字段,但显然它们根本没有效果(参考:http://radio.javaranch.com/davo/2008/10/15/1224063498569.html

对该文章的评论指出:

作为我工作的一部分写 CAPTCHA 破解器的人(不,不是为了 垃圾邮件),我可以向您保证,隐藏的字段绝不会绊倒 我起来。正如另一张海报提到的,我检查了有线流量, 并且不要太注意 HTML 中的内容 表格。

这让我相信垃圾邮件机器人会直接向服务器发出 POST 请求,而不是请求表单并填写。

如果是这种情况,如果我创建一个隐藏的只读字段,并使用存储在 SESSION 中的哈希预填充该字段会怎样。当用户提交表单时,我可以比较这些值。这可以作为一种远离垃圾邮件机器人的方式,还是我在监督什么?

如果表单从未被请求,我当然不会找到存储在会话中的任何哈希,因此可以忽略该请求。

【问题讨论】:

  • 您在这里至少做了三个假设,您应该重新检查: 1. 所有 CAPTCHA 破解者都使用相同的技术; 2. 你有一个想法,专业构建验证码的人和专业破解它们的人没有(并且无法弄清楚); 3. 您的网站很快就会成为垃圾邮件发送者的目标,因此您现在可以投入开发时间。他们没有,你没有,现在也不是。
  • @Jordan:我同意我做出前两个假设。不幸的是,第三个不是其中之一。我仍在网站上工作,上周完成了注册功能,并且我的数据库中已经有 3 个明显的机器人。
  • @xbonez 你在 cmets 中的说法几乎反驳了你被引导的“信念”。

标签: php captcha spam-prevention


【解决方案1】:

添加另一个与服务器端会话变量相关的挑战字段是一个好方法;这将需要垃圾邮件机器人方面付出更多的努力,即他们必须加载和解析表单,填写并发出另一个请求(发送必要的 cookie)。

您还可以考虑添加 JavaScript 来修改给定的挑战,并以某种方式对其进行修改。然后,攻击者需要找出你的代码做了什么,然后才能以自动方式复制它。转换可以是简单的rot13 或更复杂的xor 操作。像md5sha1 这样的东西是已建立的算法,所以这些都是一个糟糕的选择;它必须是定制的。

当然,如果攻击者注定要以您的网站为目标,那么您就无法阻止垃圾邮件进入;这是丑陋的事实。例如,它们可以运行 Selenium 并绕过您精心构建的所有 JavaScript 保护。

【讨论】:

  • 我也喜欢将 JS 融入其中的想法。当您说“使用 Javascript 修改挑战”时,您想到了什么?像,也许,反转哈希?
  • 我同意,一般来说,验证码等的全部意义在于增加垃圾邮件发送者的计算工作,从而使垃圾邮件变得更加昂贵。在浏览器中完成一些计算会达到这个目标。
  • @xbonez 我在答案中添加了“修改挑战”的示例
  • 谢谢。如果我使用相对复杂的东西并混淆/缩小代码,则需要花费相当大的精力对其进行逆向工程,我怀疑我的网站是否值得这么麻烦。当然,除非正如 sundowned 提到的那样,该机器人作为浏览器插件运行并且能够执行 JS。
  • @xbonez 是的,添加了对 Selenium 的引用 :)
【解决方案2】:

很遗憾,我怀疑您已经有垃圾邮件发送者专门针对您的网站。如果您手动实现了登录和注册,那么垃圾邮件机器人不太可能具有能够在没有专门针对您的表单定制的情况下进行注册的逻辑。

其他解决方案都很好,虽然它们会有所帮助,但它们都无法阻止即使是适度确定的垃圾邮件发送者。许多垃圾邮件机器人作为浏览器插件运行,因此相信垃圾邮件机器人无法评估 JavaScript 或一开始就不会调用表单不太可能对您有很长时间的帮助。至少,一个用于注册的验证码(也许对于每个帖子,或者您的网站所做的任何事情,直到该帐户被手动批准)可能是强制性的。

我知道您不想影响用户体验,但垃圾邮件和帐户对用户体验的危害远大于验证码。 咬紧牙关,尽一切可能减缓垃圾邮件发送者的速度,否则您的用户会寻找其他地方。

诚然,验证码不是完整的解决方案 - 存在可以比人类更准确地(在某些情况下)解决它们的软件。它们就像丰富的早餐麦片一样,只是完整早餐的一部分——没有人会以垃圾邮件开始新的一天。 ;)

管理新用户可能会很有帮助。

【讨论】:

  • 是的,看来我将不得不选择更具侵略性的东西。我正在考虑使用电子邮件验证。垃圾邮件机器人无法验证帐户,是吗?
  • 邮箱验证?当然,他们有能力做到这一点,总的来说——这是一个微不足道的问题。并非所有垃圾邮件机器人都可以,但请记住,在人类用户设置帐户后会发生大量垃圾邮件
  • 理性思考:如果有一种机器人无法通过的验证方法,每个人都会使用它。不会再有垃圾邮件了。因此,没有什么是万无一失的。
  • 是这样的:每个验证步骤都会增加一个级别的复杂性。它越复杂,能够浏览它的垃圾邮件机器人就越少。您希望在垃圾邮件发送者的路径上有足够的障碍,以便他们将注意力集中在防御不如您的站点上。如果你真的很偏执,你可能需要 SMS 身份验证或其他东西,但这也不是万无一失的,这要归功于 SMS 网关。
【解决方案3】:

不同的垃圾邮件机器人使用不同的方式。

但最灵活的垃圾邮件机器人: 1. 带表单的请求页面 2.阅读它包含哪些字段 3. 发送 POST 请求,找到带有一些填充值的字段

您不能确定,所有机器人都能找到并留下您提交的“form-session-token”输入。您不能确定所有机器人都可以使用 javascript(另一种保护方式 - 在提交时使用 js 添加必填字段)。但是机器人有很多不同。

【讨论】:

    【解决方案4】:

    我会说这取决于机器人。如果有人以您的网站为目标,则可以很容易地绕过:

    1. 带有表单并填写会话值的请求页面
    2. 填写表格并提交。

    我会说这几乎没有保护。

    遗憾的是,我不太熟悉机器人的当前状态以及它们的工作方式,所以这只是我对解决此实现的难易程度的意见。

    【讨论】:

    • 确实,针对我网站的机器人可以绕过保护。高级机器人也可以解析 CSS 并识别隐藏字段。我会选择“最有效”的方法,因为可能不存在“完美的方法”。
    猜你喜欢
    • 2014-10-22
    • 2011-07-05
    • 2013-05-05
    • 2014-05-19
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多