日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > WEB安全實戰(一)SQL盲注

WEB安全實戰(一)SQL盲注

來源:程序員人生   發布時間:2014-11-11 08:24:48 閱讀次數:3162次

前言


好長時間沒有寫過東西了,不是不想寫,只不過是1直靜不下心來寫點東西。固然,拖了這么長的時間,也總該寫點甚么的。最近剛剛上手安全方面的東西,作為1個菜鳥,也本著學習的目的,就談談最近接觸到的安全方面的問題吧。


背景


既然提到了背景,那我們就簡單的帶1下,最近http://www.jyygyx.com/Internet/上爆出了各種驚人的事件、各種門、各種照的,歸根結柢,都是網絡安全出的問題,有的是網絡被他人監控了,廣大大眾的生活工作都處在人家的眼皮底下,1舉1動都逃不出人家的“法眼”;還有的是1些商家的http://www.jyygyx.com/server/被黑,用戶名、密碼被盜,信譽卡被盜刷,私人文件泄漏等等。這些都是安全出了問題。固然,強如蘋果那樣的大公司,都會出現這樣的事件,更別說普普統統的小公司了。


問題


SQL盲注,這個詞我想大家應當不怎樣陌生。如果說實在不知道的話,那末“SQL注入”你1定聽說過。這兩個詞似乎有甚么聯系,長的跟雙胞胎似的?沒錯,SQL盲注是1種Web系統的安全漏洞,而且是比較嚴重的那種,它是SQL注入的其中1種方式。也就是說,SQL注入存在很多種方式,而SQL盲注就是其中的1種。

在安全級別中,SQL盲注是1種要挾程度很高的安全漏洞,通過這類方式,可以入侵服務提供商的http://www.jyygyx.com/server/http://www.jyygyx.com/db/,從而盜取、篡改、乃至是刪除用戶數據。固然,在正常情況下,這些都是不允許產生的,在系統上線之前,這些都是經過嚴格檢測的,而且http://www.jyygyx.com/db/中的數據也都是不定向的加密,不會暴露用戶數據的。


技術描寫


采取IBM的AppScan,對系統進行測試,由于在初期的開發中,采取了很多不規范的代碼,因此,這次的測試可謂是“大豐收”,網站安全方面的漏洞暴露無疑,而在安全測試報告中,最嚴重的漏洞就非SQL盲注莫屬了。



解決方案


SQL盲注的危害大家也都清楚了,那末該如何避免這類情況的產生呢?說簡單點,就是對要求進行過濾,對參數進行驗證,對非法字符進行攔截替換,清算用戶輸入的危險字符,保證sql能夠在http://www.jyygyx.com/db/中正確的編譯和履行。這就是解決的簡單思路。不過,今天我想要說的不是這些,而是在偉人的肩膀上發現問題,解決問題。

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

代碼以下

<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步,如果你想寫出1個完全避免SQL盲注的系統。那末還是需要對用戶發出的要求進行過濾,而且還要包括要求中的參數值,很有可能包括1些危險字符,這些危險字符就是我們需要過濾并處理的問題所在。關于解決危險字符這1塊,我留到后面細說,由于這觸及到很多個漏洞,包括:XSS,CSRF等等。


結束語


俗語說,安全猛于虎!安全無小事!在http://www.jyygyx.com/Internet/上,這些也是1樣的。剛開始接觸安全的我,也許說是,剛開始深入研究安全的我,正在汲取這方面的營養,通過測試出來的安全漏洞,1點1點的解決潛伏的危機。這還僅僅是個開始,后續的日子里還有很長的路要走,大家1起加油吧。固然,如果有甚么新的感受,我也會寫出來跟大家1起分享,1起進步。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲欧美一区在线 | 日本精a在线观看 | av无遮挡| 欧美福利在线播放 | 一区二区三区在线视频播放 | 日韩一区二区三区在线观看 | 欧美日韩电影一区二区 | 欧美a区 | 成人午夜天 | 国产片一区二区 | 久久综合中文 | 欧美区一| 久久xxxx | 成人免费高清视频 | 爱情岛论坛首页免费 | se94se亚洲精品setu | av在线资源网 | 久一视频在线观看 | 韩日精品一区二区 | 亚洲精品美女视频 | 久久精选 | 欧美日韩在线看片 | 国产精品久久久久久久久免费蜜臀 | 麻豆传媒免费看 | 国产主播精品 | 可以在线观看的av网站 | 久久久久成人精品免费播放 | 成人手机在线免费视频 | 午夜激情在线 | 国产精品一区二区三区久久久 | 久久国产精品久久久久久久久久 | 四色永久访问网站 | 天堂网2021 | 欧美一级黄色片免费观看 | 久久久久久国产精品 | 美女网站黄免费 | 亚洲专区视频 | 国产精品一区在线观看你懂的 | 国产在线观看一区 | 亚洲欧美日韩精品久久亚洲区 | 97午夜 |