博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WEB安全实战(一)SQL盲注
阅读量:4478 次
发布时间:2019-06-08

本文共 6103 字,大约阅读时间需要 20 分钟。

前言

好长时间没有写过东西了,不是不想写,仅仅只是是一直静不下心来写点东西。当然,拖了这么长的时间,也总该写点什么的。近期刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈近期接触到的安全方面的问题吧。

背景

既然提到了背景,那我们就简单的带一下,近期互联网上爆出了各种惊人的事件、各种门、各种照的,归根结底,都是网络安全出的问题,有的是网络被别人监控了,广大群众的生活工作都处在人家的眼皮底下,一举一动都逃不出人家的“法眼”;还有的是一些商家的server被黑,username、password被盗,信用卡被盗刷,私人文件泄漏等等。这些都是安全出了问题。当然,强如苹果那样的大公司,都会出现这种事件,更别说普普通通的小公司了。

问题

SQL盲注,这个词我想大家应该不怎么陌生。假设说实在不知道的话,那么“SQL注入”你一定听说过。这两个词似乎有什么联系,长的跟双胞胎似的?没错,SQL盲注是一种Web系统的安全漏洞,并且是比較严重的那种,它是SQL注入的当中一种方式。也就是说,SQL注入存在非常多种方式,而SQL盲注就是当中的一种。
在安全级别中,SQL盲注是一种威胁程度非常高的安全漏洞,通过这样的方式,能够入侵服务提供商的server数据库,从而窃取、篡改、甚至是删除用户数据。当然,在正常情况下,这些都是不同意发生的,在系统上线之前,这些都是经过严格检測的,并且数据库中的数据也都是不定向的加密,不会暴露用户数据的。

技术描写叙述

採用IBM的AppScan,对系统进行測试,因为在早期的开发中,採用了非常多不规范的代码,因此,这次的測试可谓是“大丰收”,站点安全方面的漏洞暴露无疑,而在安全測试报告中,最严重的漏洞就非SQL盲注莫属了。

解决方式

SQL盲注的危害大家也都清楚了,那么该怎样防止这样的情况的发生呢?说简单点,就是对请求进行过滤,对參数进行验证,对非法字符进行拦截替换,清理用户输入的危急字符,保证sql可以在数据库中正确的编译和运行。这就是解决的简单思路。只是,今天我想要说的不是这些,而是在巨人的肩膀上发现问题,解决这个问题。
MyBatis,一款相当好用的持久化框架,有了它之后,我们省下了非常多的时间、非常多的反复性工作。同一时候,也要意识到,在框架的运用中,也是存在一些安全问题的,当然,框架中有的已经给出了非常好的解决方式,但有的还是须要我们自己去解决。比方这个SQL盲注的问题,MyBatis就给出了非常好的解决方式,在mapper.xml文件里使用#{name}的方式提供占位符,使得sql在数据库中编译的时候,将这些占位符替换成用户输入的正确的參数值,这样就避免了一部分的问题。
代码例如以下
and ${criterion.condition}
and ${criterion.condition} #{criterion.value}
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
and ${criterion.condition}
#{listItem}
and ${criterion.condition}
and ${criterion.condition} #{criterion.value}
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
and ${criterion.condition}
#{listItem}
SYS_ID , OBJ_ID , OBJ_NAME , OBJ_DESCRIPTION , CREATOR , CREATE_TIME , UPDATE_OPERATOR , UPDATE_TIME , CLIENT_CHK_FLAG , CELL_PHONE , REG_EMAIL , GENDER , QQ_NO , WEB_URL
from T_ACNT
delete from T_ACNT
insert into T_ACNT ( OBJ_ID , OBJ_NAME , OBJ_DESCRIPTION , CREATOR , CREATE_TIME , UPDATE_OPERATOR , UPDATE_TIME , CLIENT_CHK_FLAG , CELL_PHONE , REG_EMAIL , GENDER , QQ_NO , WEB_URL ) values ( #{objId,jdbcType=VARCHAR} , #{objName,jdbcType=VARCHAR} , #{objDescription,jdbcType=VARCHAR} , #{creator,jdbcType=VARCHAR} , #{createTime,jdbcType=TIMESTAMP} , #{updateOperator,jdbcType=VARCHAR} , #{updateTime,jdbcType=TIMESTAMP} , #{clientChkFlag,jdbcType=DECIMAL} , #{cellPhone,jdbcType=VARCHAR} , #{regEmail,jdbcType=VARCHAR} , #{gender,jdbcType=DECIMAL} , #{qqNo,jdbcType=VARCHAR} , #{webUrl,jdbcType=VARCHAR} )
update T_ACNT set OBJ_ID = #{record.objId,jdbcType=VARCHAR} , OBJ_NAME = #{record.objName,jdbcType=VARCHAR} , OBJ_DESCRIPTION = #{record.objDescription,jdbcType=VARCHAR} , CREATOR = #{record.creator,jdbcType=VARCHAR} , CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP} , UPDATE_OPERATOR = #{record.updateOperator,jdbcType=VARCHAR} , UPDATE_TIME = #{record.updateTime,jdbcType=TIMESTAMP} , CLIENT_CHK_FLAG = #{record.clientChkFlag,jdbcType=DECIMAL} , CELL_PHONE = #{record.cellPhone,jdbcType=VARCHAR} , REG_EMAIL = #{record.regEmail,jdbcType=VARCHAR} , GENDER = #{record.gender,jdbcType=DECIMAL} , QQ_NO = #{record.qqNo,jdbcType=VARCHAR} , WEB_URL = #{record.webUrl,jdbcType=VARCHAR}
update T_ACNT
OBJ_ID = #{objId,jdbcType=VARCHAR},
OBJ_NAME = #{objName,jdbcType=VARCHAR},
OBJ_DESCRIPTION = #{objDescription,jdbcType=VARCHAR},
CREATOR = #{creator,jdbcType=VARCHAR},
CREATE_TIME = #{createTime,jdbcType=TIMESTAMP},
UPDATE_OPERATOR = #{updateOperator,jdbcType=VARCHAR},
UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP},
CLIENT_CHK_FLAG = #{clientChkFlag,jdbcType=DECIMAL},
CELL_PHONE = #{cellPhone,jdbcType=VARCHAR},
REG_EMAIL = #{regEmail,jdbcType=VARCHAR},
GENDER = #{gender,jdbcType=DECIMAL},
QQ_NO = #{qqNo,jdbcType=VARCHAR},
WEB_URL = #{webUrl,jdbcType=VARCHAR},
where SYS_ID = #{sysId,jdbcType=DECIMAL}
当然,这不过第一步,假设你想写出一个彻底防止SQL盲注的系统。那么还是须要对用户发出的请求进行过滤,并且还要包含请求中的參数值,非常有可能包含一些危急字符,这些危急字符就是我们须要过滤并处理的问题所在。关于解决危急字符这一块,我留到后面细说,由于这涉及到非常多个漏洞,包含:XSS,CSRF等等。

结束语

俗话说,安全猛于虎!安全无小事!在互联网上,这些也是一样的。刚開始接触安全的我,也许说是,刚開始深入研究安全的我,正在汲取这方面的养分,通过測试出来的安全漏洞,一点一点的解决潜在的危机。这还不过个開始,兴许的日子里还有非常长的路要走,大家一起加油吧。当然,假设有什么新的感受,我也会写出来跟大家一起分享,一起进步。

转载于:https://www.cnblogs.com/zfyouxi/p/4309271.html

你可能感兴趣的文章
英语语法(2)----点破主谓宾系表三大句型
查看>>
html如何与cgi数据交换,HTML网页与CGI之间通信的 实例分析
查看>>
html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
查看>>
mysql数据在html上面显示不出来的,HTML表格不能正确显示MySQL数据
查看>>
数据包和html,数据包和数据报有何区别?
查看>>
jq 异步调用一个html,聊聊如何将jQuery的$.ajax()用于异步HTTP请求
查看>>
html导出excel多sheet,js 导出多sheet表格
查看>>
html日期函数,我所见过的最简短、最灵活的javascript日期转字符串工具函数
查看>>
flann matlab,FLANN 快速的(近似)最近邻开源库
查看>>
pmta linux视频,PowerMTA (PMTA) 的安装和设置方法 – 黄忠 – 博客
查看>>
2016秋季C语言程序设计试题,2016c语言程序设计模拟试题
查看>>
C语言编程初体验 作文,C语言作文件操常用代码
查看>>
rar for android去广告,安卓解压神器RAR v5.30.39 去广告版
查看>>
android p什么变化,Android P预览版,这些调整和变化最值得关注
查看>>
android 7.0宽度432,全球最小的4G手机,比手掌还小,安卓7.0
查看>>
android fragmentstatepageradapter框架,Android FragmentStatePagerAdapter
查看>>
html自适应meta标签,自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结...
查看>>
html怎么加入编辑器,HTML 编辑器
查看>>
python发挥程度_你为什么用 Python?
查看>>
file 选择的文件胖多有多大_「HTML5 进阶」FileAPI 文件操作实战,内附详细案例,建议收藏...
查看>>