6

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

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

对该文章的评论指出:

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

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

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

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

4

4 回答 4

6

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

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

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

于 2012-05-23T05:56:19.370 回答
2

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

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

我知道您不想影响用户体验,但垃圾邮件和帐户对用户体验的危害远大于验证码。咬紧牙关,尽一切可能减慢垃圾邮件发送者的速度,否则您的用户将转向别处。

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

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

于 2012-05-23T06:25:01.300 回答
0

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

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

我会说这几乎没有保护。

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

于 2012-05-23T05:54:14.793 回答
0

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

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

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

于 2012-05-23T05:58:10.767 回答