强化Captcha安全性

时间:2012-05-03 07:05:05

标签: security session-variables captcha

几乎所有网站都使用CAPTCHA图像来保护其表单免受垃圾邮件的侵害。但这是最安全的方式吗?据我所知,CAPTCHA的想法是用包含一些“难以识别”的文本的图像挑战用户,这样如果访问者是人(不是机器人),他/她将能够发布数据但不是机器。该网站发送验证码(图像)和一个会话变量,其中可能包含验证码图像的散列版本(正确答案但是已经散列)。用户提交表单,服务器必须确保他/她键入的字母的哈希值=会话变量中包含的哈希值。 好吧,如果我(垃圾邮件发送者)编写了一个模仿相同请求并将其发送到服务器的软件,该怎么办?换句话说,如果验证码是abc123并且散列(在可以用任何HTTP嗅探器读取的会话变量中)是xyz345(考虑这是一个32个字符的字符串)并且我在发布请求中将此数据发送到服务器?然后我开始变得更有创意,我把这个代码放在10,000循环中,用垃圾邮件数据压倒服务器!现在CAPTCHA安全吗?他们可以面对这样的威胁吗? 感谢

2 个答案:

答案 0 :(得分:1)

您的假设是错误的:客户端也不能读取会话数据,Captchas也不能缓解DOS攻击。

Captcha是一种挑战/响应技术,其中服务器向客户端发出一个只能由人类解决的挑战。大多数Captchas提出的光学字符识别(OCR)挑战只是一种变体,但肯定是一种好的,因为OCR对于大多数有文化的人来说更容易,但却给计算机带来了问题。

但是,如果对挑战的回应很容易猜测,推导或获得其他方面,那么任何Captcha都是毫无价值的。在隐藏表单字段中以普通或派生形式发送预期响应就是这样的示例。将响应作为参数传递给Captcha图像是另一个例子。

这就是为什么期望的响应应该作为会话数据保留在服务器端,客户端无法读取,因为只传输了会话的标识符。

你的第二个担忧,即Captchas无法阻止DOS攻击,是真的。再说一遍,这不是Captchas应该解决的原因。 Captchas被发明为“告诉计算机和人类”,而不是其他任何东西。它们只能帮助防止自动垃圾邮件成功。但坦率地说,激烈的挑战/响应生成很可能导致DOS。

答案 1 :(得分:0)

Captcha不是防止窃取会话cookie的方法。如果您想要安全会话使用例如HTTPS。

Captcha不会阻止(D)DOS攻击,如果你希望你的服务器每秒能够保存10.000个垃圾邮件请求,那么就采取对策。

验证码的唯一目的是确定请求是来自人还是机器。这将阻止创建帐户等的自动脚本,但您仍然必须通过其他方式保护您的网站,包括验证码的安全性。暴露验证码答案或让用户决定解决哪个验证码的服务器是错误的。

理想的验证码对每个人来说都是微不足道的,但每台机器都无法解决。所以它对用户来说不应该是一个挑战。不幸的是机器非常好,所以你必须提出挑战,这对我们来说也很难。