Web安全开发之验证码设计不当引发的撞库问题

  感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复。以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题,甚至在一些银行或者电商的登录与查存页面同样存在这个问题,一旦造成撞库无论对用户账号的安全性还是网站的负载都是巨大的挑战。其实造成问题的原因并不复杂,主要是研发在开发过程中缺少对安全的认知,造成的疏忽。 

今天心血来潮自己写了个验证码来模拟下出现的问题,首先我们从前端页面开始分析:

<!DOCTYPE html>
<html>
  <head>
   <meta chartset="utf-8">
  </head>
  <body>
     <form method="post"  action="form.php">
       <p>验证码图片:<img border="1" id="capthcha_img" onclick="this.src=‘captcha.php?r=‘+Math.random()" src="captcha.php?r="<?php echo rand();?> width="100" height="30"  /> <a href="javascript:void(0)" onclick="document.getElementById(‘capthcha_img‘).src=‘captcha.php?r=‘+Math.random()">换一个</a></p>
       <p>输入内容:<input type="text" name="autocode" value="" /></p>

    <p><input type="submit"  value="提交" style="padding:6px 20px;"/></p>

     </form>
  </body>

</html>

  可以看出验证码是通过captacha.php来生成。

  我们节选captacha.php的关键部分来分析:

$_SESSION[‘authcode‘]=$captch_code;

  我们把生成的captch_code以文字形式存在一个临时的session中。

  并在前端表单提交后,在form.php中验证POST的验证码是否与Session中的值一致。

<?php
   if(isset($_REQUEST[‘autocode‘])){
      session_start();
      if(strtolower($_POST[‘autocode‘]) == $_SESSION[‘authcode‘]){
       echo ‘right‘;
      }else{
      echo‘wrong‘;
      }

   exit();
   }

?>

  万事俱备,似乎一切都很完美,一个验证码(机器自动化识别不在本次讨论范围内,TT)。

  

  输入正确返回right:

  

  输入错误范围wrong:

  

  好了,漏洞来了。我们放到burpsuite中愉快的玩耍一下,在提交验证码的过程中抓包、截断、重放一下数据包:

无限重放验证码它就是不失效。

怎么修,这问题愁死我了,想了好久,终于有了点眉目。

其实很早以前我们写测试报告都说应该让存有验证码Session在合适的时间失效,问题是如何实现。考虑了一下,可以通过以下方法处理:

<?php
   if(isset($_REQUEST[‘autocode‘])){
      session_start();
	  if($_SESSION[‘authcode‘] ==‘NULL‘){
          \\通过验证码是否为空检测验证码是否被提交过
	   echo‘Invalid expired‘;
      }elseif(strtolower($_POST[‘autocode‘]) == $_SESSION[‘authcode‘]){
       echo ‘right‘;
      }else{
      echo‘wrong‘;
      }
	  $_SESSION[‘authcode‘]=‘NULL‘;  \\发起一次form提交后把session值置空
   exit();
   }

?>

  效果如下:

  

  如有不正确,欢迎大家指正。谢谢

  

   

时间: 2024-10-20 06:55:43

Web安全开发之验证码设计不当引发的撞库问题的相关文章

web前端开发与页面设计的协作、区别与发展

web前端开发与页面设计的协作.区别与发展,布布扣,bubuko.com

[转]关于Web前端开发,附:(百度web前端笔试面试题目)

关于Web前端及百度web前端笔试面试题目 随着各大互联网公司设立了Web前端开发工程师.设计工程师等职位,web前端越来越得到互联网企业的认可.而且其重视程度与地位也随着浏览器 端的富客户端的体现而日益提高. 眼前对HTML5的未来和走向,业内的预测是会和Flash.Silverlight等相结合,从而取代传统的客户端应用程序.而实现这个目标的客户端核 心工作是有Web前端工程师来完成的. 从另一个角度,对于web产品来说,交互和用户体验是产品的第一价值,这部分价值的体现就是在web前端.可以

用MyEclipse做web项目开发中如何去除jsp页面中的设计视图

开始用MyEclipse做WEB项目开发时,当用到jsp页面时,新建一个后总是上面是jsp的设计视图,下面才是jsp页面,这样太不方便了,下面是去除这个视图页面的步骤:      MyEclipse->Preference->General->Editors->File Associations->在右边选中*.jsp,然后到右下角选择MyEclipse JSP Editor(default)就行了. 在jsp页面还有几行默认的代码,你的网站做出来后是要上传到服务器的,之后你

大前端应用开发与架构设计-使用HTML构建Web站点

大前端应用开发与架构设计-使用HTML构建Web站点 大前端应用开发与架构设计 2.1 Web基础介绍 2.1.1 了解互联网应用程序的架构 什么叫做互联网? 互联网:通过网络(有线.无线,4G)将世界各地的计算机(手机.平板.PC.服务器)连接起来的结构. 随着互联网及其相关技术的不断发展,目前基于互联网的程序有B/S(Broswer/Server)架构和C/S(Client/Server)架构两种组成. B/S也就是浏览器/服务器,用户只需要在浏览器中进行相关操作(通常是输入访问地址,或者提

大前端应用开发与架构设计-使用CSS美化Web站点(一)

大前端应用开发与架构设计-使用CSS美化Web站点(一) 大前端应用开发与架构设计 3.1 CSS概述 CSS(Cascading Style Sheets)即层叠样式表,是用来控制HTML元素的外观样式(例如字体颜色.大小以及元素的定位等等),目前最新的版本是CSS3. 网页中使用HTML+CSS能够实现网页的元素与外观样式分离,也就是HTML只负责页面元素以及语义部分,CSS负责页面的外观样式,这也是W3C组织推荐的做法,尽量使用CSS取代HTML属性,因为如果让HTML既负责页面结构,又要

《编写高质量代码--Web前端开发修炼之道》读书笔记

前言 这两周参加公司的新项目,采用封闭式开发(项目成员在会议室里开发),晚上加班到很晚,所以没时间和精力写原创博客了,今天就分享下这篇<编写高质量代码--Web前端开发修炼之道>读书笔记吧. 正文 欲精一行,必先通十行. 在前端开发这个领域,一专多能更是非常必要的. table布局缺点: 代码量大,结构混乱: 标签语义不明确,对搜索引擎不友好. css布局:div+css,或者(x)html+css. 代码量少.结构精简.语义清新. 代码量少,浏览器端下载时间就会更短: 语义清晰就会对搜索引擎

Web前端开发修炼之道--笔记

花了一个星期看完了这本书,把随笔写一写,还摘录了一些书里封装好的函数,偶尔多看看(只捡了感觉重要的东西) HTML(Model)+CSS(View)+javascript(Controller) 怪异模式是因为DTD触发,也就是 Document Type Definition (文档定义类型) <!DOCTYPE html> 多种组织CSS方式 例如可以按功能划分 font.css color.css layout.css 此书推荐base.css(通用层)+common(网站级)+css+

Web安全开发规范手册V1.0

一.背景 团队最近频繁遭受网络攻击,引起了部门技术负责人的重视,笔者在团队中相对来说更懂安全,因此花了点时间编辑了一份安全开发自检清单,觉得应该也有不少读者有需要,所以将其分享出来. 二.自检清单 检查类型 说明 检查项 输入验证 概述 任何来自客户端的数据,如URL和参数.HTTP头部. Javascript戓其他嵌入代码提交的信息,都属于不可信数据.在应用外部边界或内部每个组件或功能边界,都将其当做潜在的恶意输入来校验 白名单 不可信数据可以设定白名单校验的,应接受所有和白名单匹配的数据,并

Web 前端开发学习之路(入门篇)

字数1374 阅读4622 评论0 喜欢49 以前学习过一段时间的web前端开发,整理了一些我看过的/我认为比较好的学习资料(网站.书籍).不要问我为啥没有进阶版,我只是一条产品汪而已,求轻喷.== 以下引用知乎 @李路 的话. 以我的经验,大部分技术,熟读下列四类书籍即可. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列全面,巨细无遗地探讨每个细节,遇到疑难问题时往往可以在这里得到理论解答,如Definitive Guide/Programming xx系列实践,结合