• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 验证码的三个常见漏洞和修复方法

验证码的三个常见漏洞和修复方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了验证码绕过漏洞,漏洞验证,m1卡的验证漏洞,验证码漏洞,漏洞验证工具等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

把验证码存储在Cookie中

一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。由于Session会占用服务器资源,我曾经想过是否可以把验证码的值加密后存储在Cookie中。不过事实证明,这只是异想天开罢了。

假设验证码的值是a,通过sha1加密后得到的值为b = sha1(a),并且把b存储在Cookie中。而用户提交的验证码值为c,通过判断sha1(c)是否与b相等,可以知道输入的验证码是否正确。然而,Cookie是受客户端控制的。如果用户事先通过肉眼看到验证码的值是a,又从Cookie中得知此时的加密值为b,那么,他只要在提交前把Cookie的值修改为b,提交的验证码值为a,就可以永远通过验证。

没有进行非空判断

这种情况可以直接用代码来说明:
if (Request["captcha"] == Session["captcha"] as string)
{
    // 验证通过,继续操作
}
</div>
假设用户绕过了系统提供的表单直接提交数据,此时验证码还没生成,Session["captcha"]为空。用户不提交验证码时,Request["captcha"]也为空。于是,验证通过了。

要解决这个问题,其实只要加个非空判断就可以了:
if (!String.IsNullOrEmpty(Request["captcha"]) &&
    Request["captcha"] == Session["captcha"] as string)
{
    // 验证通过,继续操作
}
</div>

没有及时销毁验证码

使用验证码要遵循一个原则,在一次比对之后,无论用户输入正确与否,都要立刻将验证码销毁。

如果不这样做,就可以出现以下情况:

假设用户输入错误,且验证码没有重新生成,那么他就可以一直尝试,直到正确为止。虽然机器对图片的一次性识别率比较低,但是,如果同一张图片你给它无限次机会的话,它还是可以识别出来的。
假设用户输入成功,且验证码没有销毁,那么在Session过期之前,他就可以一直用这个验证码通过验证。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 验证码的三个常见漏洞和修复方法

相关文章

  • 2017-05-28用C#来解析PDF文件
  • 2017-05-28c#.NET中日志信息写入Windows日志中解决方案
  • 2017-05-28C#两个相同属性的类赋值方法
  • 2017-05-28C#遍历DataSet控件实例总结
  • 2017-05-28C# 中如何取绝对值函数
  • 2017-05-28C#中多态现象和多态的实现方法
  • 2017-05-28C#的3DES加密解密算法实例代码
  • 2017-05-28windows中使用C# 调用 C语言生成的dll
  • 2017-05-28ref与out之间的区别深入解析
  • 2017-05-28C# 复制指定节点的所有子孙节点到新建的节点下

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#画笔Pen使用路径绘制图形的方法
    • C#控制台输出进度和百分比的实例代码
    • C#使用DllImport调用非托管的代码的方法
    • sort page 排序和分页的小例子
    • c#获得目标服务器中所有数据库名、表名、列名的实现代码
    • WinForm自定义函数FindControl实现按名称查找控件
    • C#知识整理
    • C#实现漂亮的数字时钟效果
    • C#制作鹰眼的详细全过程(带注释)实例代码
    • WPF微信聊天和通讯录按钮样式代码分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有