【问题标题】:Hardening Captcha security强化验证码安全性
【发布时间】:2012-05-12 16:31:53
【问题描述】:

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

【问题讨论】:

  • 很抱歉,但据我了解,Session 是一个服务器端实体,它不会以任何方式传输到客户端,我无法理解嗅探会话变量的概念,请您详细说明一下更多?
  • 会话包含在用户的 HTTP 请求中。它应该在那里,否则服务器将无法“识别”用户。不要忘记 HTTP 是一种无状态协议。
  • 先生,http 是一个无会话协议,但服务器不向客户端发送会话,它只是向客户端发送会话标识符,客户端在下次调用时返回,会话变量仅保留在服务器一边,所以不存在丢失会话值的问题
  • 好的,我可以一遍又一遍地重新发送这个 session_identifier 吗?是的,我可以,而且我已经编写了一个 C# 程序来做这件事。该程序能够绕过我的一个站点的验证码安全性,并且该表单用于向客户发送邮件。想象一下产生的垃圾邮件数量。
  • 但是在那种情况下,你可能错过了一些你允许在没有验证码的情况下发送它的部分,如果你仍然觉得你可以,尝试任何运行流行网站的生产需要验证码的,可能是 gmail 之类的,尝试绕过他们的验证码

标签: security session-variables captcha


【解决方案1】:

您的假设是错误的:客户端既不能读取会话数据,也不能使用验证码来缓解 DOS 攻击。

验证码是一种质询/响应技术,服务器向客户端发出只能由人类解决的质询。大多数验证码存在的光学字符识别 (OCR) 挑战只是一种变体,但肯定是一个很好的变体,因为 OCR 对大多数有文化的人来说更容易,但对计算机来说却是个问题。

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

这就是为什么预期的响应应该留在服务器端,作为会话数据,客户端不可读,因为只传输会话的标识符。

您的第二个担忧是验证码无法阻止 DOS 攻击,这是正确的。同样,这不是验证码应该解决的原因。验证码的发明是为了“区分计算机和人类”,仅此而已。它们只能帮助防止自动垃圾邮件成功。但坦率地说,强烈的挑战/响应生成很可能导致 DOS。

【讨论】:

    【解决方案2】:

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

    Captcha 不能防止 (D)DOS 攻击,如果您希望您的服务器每秒可以防止 10.000 个垃圾邮件请求,请采取相应的对策。

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

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

    【讨论】:

    • 我不是在谈论 DDOS 攻击。我说的是攻击 CAPTCHA 代码最初存在的目的:我可以向服务器发送看似来自人类的“合法”请求,而它来自我创建的模仿真实的机器人只需将“正确”会话变量添加到我的请求中即可请求。这个“正确的”会话变量可以从任何嗅探人类的一个(只有一个)请求的 HTTP 嗅探器中获取。该机器人将根据需要多次重新生成此请求以创建帐户或发送邮件。你明白了吗?
    • 如果可行,这不是验证码的错。如果您进行一次身份验证并且可以根据需要对该会话执行尽可能多的请求,那么您的问题出在您的身份验证架构中。如果您只需要为每个可能被滥用的操作创建一个新的验证码验证会话,那么您将无法对嗅探做任何事情,因为您的会话对超过 1 个操作无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2014-04-30
    • 2019-08-31
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多