java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题
感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复。以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题,甚至在一些银行或者电商的登录与查存页面同样存在这个问题,一旦造成撞库无论对用户账号的安全性还是网站的负载都是巨大的挑战。其实造成问题的原因并不复杂,主要是研发在开发过程中缺少对安全的认知,造成的疏忽。
今天心血来潮自己写了个验证码来模拟下出现的问题,首先我们从前端页面开始分析:
验证码图片: width="100" height="30" /> 换一个
输入内容:
可以看出验证码是通过captacha.php来生成。
我们节选captacha.php的关键部分来分析:
$_SESSION['authcode']=$captch_code;
我们把生成的captch_code以文字形式存在一个临时的session中。
并在前端表单提交后,在form.php中验证POST的验证码是否与Session中的值一致。
if(isset($_REQUEST['autocode'])){
session_start();
if(strtolower($_POST['autocode']) == $_SESSION['authcode']){
echo 'right';
}else{
echo'wrong';
}
exit();
}
?>
万事俱备,似乎一切都很完美,一个验证码(机器自动化识别不在本次讨论范围内,TT)。
输入正确返回right:
输入错误范围wrong:
好了,漏洞来了。我们放到burpsuite中愉快的玩耍一下,在提交验证码的过程中抓包、截断、重放一下数据包:
无限重放验证码它就是不失效。
怎么修,这问题愁死我了,想了好久,终于有了点眉目。
其实很早以前我们写测试报告都说应该让存有验证码Session在合适的时间失效,问题是如何实现。考虑了一下,可以通过以下方法处理:
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();
}
?>
效果如下:
如有不正确,欢迎大家指正。谢谢
java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题相关推荐
- 考研刷题小程序云开发实战-页面设计与制作(题库首页、排名页、我的)
目录 前言 1.创建并配置页面 2.题库首页 3.排名页和我的 总结 前言 为啥你的UI界面感觉乱?对于小程序开发者来说,特别是对于初阶开发者或者初学者,排版的好坏是这个阶段核心要考虑的问题,也就是细 ...
- Java程序员入门技术大全V1(十三) -- 开发工具之设计工具
设计工具 UML 统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言.UML使 ...
- 现实世界中正在用Java解决的难题
我们采访了11位专业商务人士,他们中大部分人都有从事涉及 Java 生态系统相关的工作.我向他们询问了一些问题,在他们职业生涯中用Java 解决了哪些实际问题. 我们采访了这些人: Anthony K ...
- Java double 保留一个小数、理解BigDecimal、Java解决精度问题
Java double 保留一个小数 两种方法 @Testpublic void test2() {double f = 234.353333000000000000000000;BigDecimal ...
- java 打开指定文件,java解决指定应用程序打开指定文件
java解决指定应用程序打开指定文件 //打开工具的路径及名字 String toolsPath = "D:/office/Office12/WINWORD.EXE"; //被打开 ...
- 车辆入库java程序_java扫描入库及出库,基于谷歌类开发.仅提供完整代码 连接SQL使用,...
java扫描入库及出库,基于谷歌类开发.仅提供完整代码 连接SQL使用,需要自行制作中心服务器,中心服务器代码在本人另一实例里面,请自行下载 [实例简介] 扫描入库及出库,基于谷歌类开发.仅提供完整代 ...
- java解决错误经验_在Java错误进入生产之前的新处理方式
java解决错误经验 我们如何认识到解决预生产错误的旧方法还不够,以及我们如何能够改变它 第一次尝试就没有完美的代码,我们所有人都可以证明我们已经通过艰苦的努力学习了. 不管我们使用多少测试周期,代码 ...
- java api 开发_Java开发人员应该知道的前20个库和API
java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...
- Java开发人员应该知道的前20个库和API
优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edition之后 ,Joshu ...
最新文章
- 视频|结构光编码与三维重建
- cygwin下安装软件
- centos6.5安装remmina rdp
- Netty和RPC框架线程模型分析
- DriveInfo类取得计算机的磁盘信息
- 《Python Cookbook 3rd》笔记(2.1):使用多个界定符分割字符串
- JS/PHP中,数组与字符串的转换,这次总算是记住了
- 2_数据分析—认识pandas
- php accept-length,php中Accept-Length获取不到下载文件的大小
- 解决“Cmake error :generator: Ninja“问题
- android+mms发送流程,mms发送流程代码版droid.docx
- VSCode打开终端的快捷键
- 一种新的人机交流方式——sound ware 声件
- mysql gtid 还是pxc_PXC中的GTIDs
- 艾司博讯:拼多多怎么设置团长ID?团长权限?
- htc+m7+android系统+电源,htc one m7 4.4系统获取root权限教程(安卓4.4专用)
- Python双均线策略回测(2021-10-12)
- android excel在线,Excel在线编辑
- SQL Compliance Manager Crack
- (HDU)1718 -- Rank (段位)