验证码中的几个常见漏洞

发布者:上海IT外包来源:http://www.lanmon.net点击数:952

通常,我们会将验证码的值存储在Session中。通过将用户提交的验证码与会话中的验证码进行比较,我们可以知道输入是否正确。由于会话将消耗服务器资源,我已经考虑过验证码的值是否可以加密并存储在cookie中。但事实证明,这只是一个异想天开的事情。
假设验证码的值是a,通过sha1加密获得的值是b=sha1(a),并且b存储在cookie中。用户提交的验证码的值为c。通过判断sha1(c)是否等于b,可以知道输入的验证码是否正确。但是,cookie由客户端控制。如果用户通过肉眼看到验证码a的值并且此时从cookie知道加密值是b,那么他只需要在提交之前将cookie的值更改为b,并且提交的验证代码值是一个。你可以永远通过验证。
验证码/漏洞/加密
没有非空判断
这种情况可以通过代码直接说明:
如果(Request ['captcha']==Session ['captcha']为字符串)
{
//验证通过,继续操作
}
假设用户绕过系统提供的表单并直接提交数据。此时,尚未生成验证码,并且Session ['captcha']为空。当用户未提交验证码时,请求['验证码']也为空。所以,验证通过了。
事实上,要解决这个问题,只需添加一个非空的判断:
如果(!String.IsNullOrEmpty(Request ['captcha'])&&
请求['验证码']==会话['验证码']作为字符串)
{
//验证通过,继续操作
}
没有及时销毁验证码
验证码的使用遵循以下原则:在比较之后,无论用户输入是否正确,都立即销毁验证码。
如果您不这样做,您可以执行以下操作:
假设用户输入错误并且未重新生成验证码,他可以尝试直到它是正确的。虽然机器对图片的一次性识别率相对较低,但如果您在同一张照片中给予它无限的机会,则可以识别它。假设用户输入成功且验证码未被破坏,他总是可以使用此验证码在会话到期之前通过验证。

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部