多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > WEB安全實(shí)戰(zhàn)(一)SQL盲注

WEB安全實(shí)戰(zhàn)(一)SQL盲注

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-11-11 08:24:48 閱讀次數(shù):3155次

前言


好長(zhǎng)時(shí)間沒(méi)有寫(xiě)過(guò)東西了,不是不想寫(xiě),只不過(guò)是1直靜不下心來(lái)寫(xiě)點(diǎn)東西。固然,拖了這么長(zhǎng)的時(shí)間,也總該寫(xiě)點(diǎn)甚么的。最近剛剛上手安全方面的東西,作為1個(gè)菜鳥(niǎo),也本著學(xué)習(xí)的目的,就談?wù)勛罱佑|到的安全方面的問(wèn)題吧。


背景


既然提到了背景,那我們就簡(jiǎn)單的帶1下,最近http://www.vxbq.cn/Internet/上爆出了各種驚人的事件、各種門(mén)、各種照的,歸根結(jié)柢,都是網(wǎng)絡(luò)安全出的問(wèn)題,有的是網(wǎng)絡(luò)被他人監(jiān)控了,廣大大眾的生活工作都處在人家的眼皮底下,1舉1動(dòng)都逃不出人家的“法眼”;還有的是1些商家的http://www.vxbq.cn/server/被黑,用戶(hù)名、密碼被盜,信譽(yù)卡被盜刷,私人文件泄漏等等。這些都是安全出了問(wèn)題。固然,強(qiáng)如蘋(píng)果那樣的大公司,都會(huì)出現(xiàn)這樣的事件,更別說(shuō)普普統(tǒng)統(tǒng)的小公司了。


問(wèn)題


SQL盲注,這個(gè)詞我想大家應(yīng)當(dāng)不怎樣陌生。如果說(shuō)實(shí)在不知道的話,那末“SQL注入”你1定聽(tīng)說(shuō)過(guò)。這兩個(gè)詞似乎有甚么聯(lián)系,長(zhǎng)的跟雙胞胎似的?沒(méi)錯(cuò),SQL盲注是1種Web系統(tǒng)的安全漏洞,而且是比較嚴(yán)重的那種,它是SQL注入的其中1種方式。也就是說(shuō),SQL注入存在很多種方式,而SQL盲注就是其中的1種。

在安全級(jí)別中,SQL盲注是1種要挾程度很高的安全漏洞,通過(guò)這類(lèi)方式,可以入侵服務(wù)提供商的http://www.vxbq.cn/server/http://www.vxbq.cn/db/,從而盜取、篡改、乃至是刪除用戶(hù)數(shù)據(jù)。固然,在正常情況下,這些都是不允許產(chǎn)生的,在系統(tǒng)上線之前,這些都是經(jīng)過(guò)嚴(yán)格檢測(cè)的,而且http://www.vxbq.cn/db/中的數(shù)據(jù)也都是不定向的加密,不會(huì)暴露用戶(hù)數(shù)據(jù)的。


技術(shù)描寫(xiě)


采取IBM的AppScan,對(duì)系統(tǒng)進(jìn)行測(cè)試,由于在初期的開(kāi)發(fā)中,采取了很多不規(guī)范的代碼,因此,這次的測(cè)試可謂是“大豐收”,網(wǎng)站安全方面的漏洞暴露無(wú)疑,而在安全測(cè)試報(bào)告中,最嚴(yán)重的漏洞就非SQL盲注莫屬了。



解決方案


SQL盲注的危害大家也都清楚了,那末該如何避免這類(lèi)情況的產(chǎn)生呢?說(shuō)簡(jiǎn)單點(diǎn),就是對(duì)要求進(jìn)行過(guò)濾,對(duì)參數(shù)進(jìn)行驗(yàn)證,對(duì)非法字符進(jìn)行攔截替換,清算用戶(hù)輸入的危險(xiǎn)字符,保證sql能夠在http://www.vxbq.cn/db/中正確的編譯和履行。這就是解決的簡(jiǎn)單思路。不過(guò),今天我想要說(shuō)的不是這些,而是在偉人的肩膀上發(fā)現(xiàn)問(wèn)題,解決問(wèn)題。

MyBatis,1款相當(dāng)好用的持久化框架,有了它以后,我們省下了很多的時(shí)間、很多的重復(fù)性工作。同時(shí),也要意想到,在框架的應(yīng)用中,也是存在1些安全問(wèn)題的,固然,框架中有的已給出了很好的解決方案,但有的還是需要我們自己去解決。比如這個(gè)SQL盲注的問(wèn)題,MyBatis就給出了很好的解決方案,在mapper.xml文件中使用#{name}的方式提供占位符,使得sql在http://www.vxbq.cn/db/中編譯的時(shí)候,將這些占位符替換成用戶(hù)輸入的正確的參數(shù)值,這樣就避免了1部份的問(wèn)題。

代碼以下

<span style="font-family:Comic Sans MS;font-size:12px;"><?xml version="1.0" encoding="UTF⑻"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis⑶-mapper.dtd"> <mapper namespace="com.test.dao.TAcntMapper"> <resultMap id="BaseResultMap" type="com.test.entity.TAcnt"> <id column="SYS_ID" jdbcType="DECIMAL" property="sysId" /> <result column="OBJ_ID" jdbcType="VARCHAR" property="objId" /> <result column="OBJ_NAME" jdbcType="VARCHAR" property="objName" /> <result column="OBJ_DESCRIPTION" jdbcType="VARCHAR" property="objDescription" /> <result column="CREATOR" jdbcType="VARCHAR" property="creator" /> <result column="CREATE_TIME" jdbcType="TIMESTAMP" property="createTime" /> <result column="UPDATE_OPERATOR" jdbcType="VARCHAR" property="updateOperator" /> <result column="UPDATE_TIME" jdbcType="TIMESTAMP" property="updateTime" /> <result column="CLIENT_CHK_FLAG" jdbcType="DECIMAL" property="clientChkFlag" /> <result column="CELL_PHONE" jdbcType="VARCHAR" property="cellPhone" /> <result column="REG_EMAIL" jdbcType="VARCHAR" property="regEmail" /> <result column="GENDER" jdbcType="DECIMAL" property="gender" /> <result column="QQ_NO" jdbcType="VARCHAR" property="qqNo" /> <result column="WEB_URL" jdbcType="VARCHAR" property="webUrl" /> </resultMap> <sql id="Example_Where_Clause"> <where> <foreach collection="oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Update_By_Example_Where_Clause"> <where> <foreach collection="example.oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Base_Column_List"> 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 </sql> <sql id="From_join"> from T_ACNT </sql> <select id="selectByExample" parameterType="com.test.entity.TAcntCriteria" resultMap="BaseResultMap"> select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> <include refid="From_join" /> <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> </select> <select id="selectByPrimaryKey" parameterType="BigDecimal" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> <include refid="From_join" /> where SYS_ID = #{sysId,jdbcType=DECIMAL} </select> <delete id="deleteByExample" parameterType="com.test.entity.TAcntCriteria"> delete from T_ACNT <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </delete> <insert id="insert" parameterType="com.test.entity.TAcnt"> 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} ) </insert> <select id="countByExample" parameterType="com.test.entity.TAcntCriteria" resultType="java.lang.Integer"> select count(*) <include refid="From_join" /> <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </select> <update id="updateByExample" parameterType="map"> 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} <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update> <update id="updateByPrimaryKeySelective" parameterType="com.test.entity.TAcnt"> update T_ACNT <set> <if test="objId != null"> OBJ_ID = #{objId,jdbcType=VARCHAR}, </if> <if test="objName != null"> OBJ_NAME = #{objName,jdbcType=VARCHAR}, </if> <if test="objDescription != null"> OBJ_DESCRIPTION = #{objDescription,jdbcType=VARCHAR}, </if> <if test="creator != null"> CREATOR = #{creator,jdbcType=VARCHAR}, </if> <if test="createTime != null"> CREATE_TIME = #{createTime,jdbcType=TIMESTAMP}, </if> <if test="updateOperator != null"> UPDATE_OPERATOR = #{updateOperator,jdbcType=VARCHAR}, </if> <if test="updateTime != null"> UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP}, </if> <if test="clientChkFlag != null"> CLIENT_CHK_FLAG = #{clientChkFlag,jdbcType=DECIMAL}, </if> <if test="cellPhone != null"> CELL_PHONE = #{cellPhone,jdbcType=VARCHAR}, </if> <if test="regEmail != null"> REG_EMAIL = #{regEmail,jdbcType=VARCHAR}, </if> <if test="gender != null"> GENDER = #{gender,jdbcType=DECIMAL}, </if> <if test="qqNo != null"> QQ_NO = #{qqNo,jdbcType=VARCHAR}, </if> <if test="webUrl != null"> WEB_URL = #{webUrl,jdbcType=VARCHAR}, </if> </set> where SYS_ID = #{sysId,jdbcType=DECIMAL} </update> </mapper></span>

固然,這僅僅是第1步,如果你想寫(xiě)出1個(gè)完全避免SQL盲注的系統(tǒng)。那末還是需要對(duì)用戶(hù)發(fā)出的要求進(jìn)行過(guò)濾,而且還要包括要求中的參數(shù)值,很有可能包括1些危險(xiǎn)字符,這些危險(xiǎn)字符就是我們需要過(guò)濾并處理的問(wèn)題所在。關(guān)于解決危險(xiǎn)字符這1塊,我留到后面細(xì)說(shuō),由于這觸及到很多個(gè)漏洞,包括:XSS,CSRF等等。


結(jié)束語(yǔ)


俗語(yǔ)說(shuō),安全猛于虎!安全無(wú)小事!在http://www.vxbq.cn/Internet/上,這些也是1樣的。剛開(kāi)始接觸安全的我,也許說(shuō)是,剛開(kāi)始深入研究安全的我,正在汲取這方面的營(yíng)養(yǎng),通過(guò)測(cè)試出來(lái)的安全漏洞,1點(diǎn)1點(diǎn)的解決潛伏的危機(jī)。這還僅僅是個(gè)開(kāi)始,后續(xù)的日子里還有很長(zhǎng)的路要走,大家1起加油吧。固然,如果有甚么新的感受,我也會(huì)寫(xiě)出來(lái)跟大家1起分享,1起進(jìn)步。


生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲 欧美 小说 国产 图片 | 国产精品99久久久 | 国产精品久久久久国产精品三级 | 在线免费福利 | 中文字幕22页 | 一级毛片特级毛片国产 | 国产在线精品一区二区中文 | 日本一区二区三区在线观看视频 | 精品国产亚洲一区二区三区 | 夜夜影院未满十八勿进 | 久久成人精品免费播放 | 免费视频中文字幕 | 久久成人精品免费播放 | www.激情小说 | 99久久精品国产综合男同 | 国产男人女人做性全过程视频 | 亚洲欧洲日韩国产一区二区三区 | 日韩一区二区三区免费视频 | 国产欧美第一页 | 亚洲国产成人久久综合一 | 乱老女人一二区视频 | 国产成人精品免费视频大 | 亚洲视频成人 | 国产成人短视频在线观看免费 | 国产在线观看精品一区二区三区91 | 一级做a爱片久久毛片 | 奇奇影院理论片在线观看 | 性xxxxx大片免费视频 | 91久久综合九色综合欧美亚洲 | 美国毛片一级视频在线aa | 亚洲天堂一区二区三区 | 国产精品久久久久久久y | 最近更新中文字幕免费版 | 亚洲精品国产一区二区三区四区 | 中文字幕国产欧美 | 另类综合小说 | 亚洲视屏在线 | 欧美在线精品永久免费播放 | 国产一区精品 | 亚洲有码区 | jizz免费 |