【发布时间】:2012-05-12 16:31:53
【问题描述】:
几乎所有网站都使用验证码图像来保护其表单免受垃圾邮件的侵害。但这是最安全的方式吗?据我了解,验证码的想法是用包含一些“难以识别”文本的图像来挑战用户,这样如果访问者是人类(而不是机器人),他/她将能够发布数据而不是机器。该网站发送验证码(图像)和一个会话变量,其中可能包含验证码图像的散列版本(正确答案但散列)。用户提交表单,服务器必须确保他/她键入的字母的散列 = 会话变量中包含的散列。 好吧,如果我(垃圾邮件发送者)编写了一个模拟相同请求并将其发送到服务器的软件怎么办?换句话说,如果验证码是 abc123 并且散列(在会话变量中,可以用任何 HTTP 嗅探器读取)是 xyz345(考虑这是一个 32 个字符的字符串)并且我在发布请求中将此数据发送到服务器?然后我开始更有创意,我把这段代码放在一个 10,000 循环中,这将用垃圾邮件数据淹没服务器!现在验证码是否安全?他们有什么选择可以让我面对这样的威胁吗? 谢谢
【问题讨论】:
-
很抱歉,但据我了解,Session 是一个服务器端实体,它不会以任何方式传输到客户端,我无法理解嗅探会话变量的概念,请您详细说明一下更多?
-
会话包含在用户的 HTTP 请求中。它应该在那里,否则服务器将无法“识别”用户。不要忘记 HTTP 是一种无状态协议。
-
先生,http 是一个无会话协议,但服务器不向客户端发送会话,它只是向客户端发送会话标识符,客户端在下次调用时返回,会话变量仅保留在服务器一边,所以不存在丢失会话值的问题
-
好的,我可以一遍又一遍地重新发送这个 session_identifier 吗?是的,我可以,而且我已经编写了一个 C# 程序来做这件事。该程序能够绕过我的一个站点的验证码安全性,并且该表单用于向客户发送邮件。想象一下产生的垃圾邮件数量。
-
但是在那种情况下,你可能错过了一些你允许在没有验证码的情况下发送它的部分,如果你仍然觉得你可以,尝试任何运行流行网站的生产需要验证码的,可能是 gmail 之类的,尝试绕过他们的验证码
标签: security session-variables captcha