![SQL攻擊的分析與防范_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/5/60f74782-3a66-437b-b838-f83e25813a14/60f74782-3a66-437b-b838-f83e25813a141.gif)
![SQL攻擊的分析與防范_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/5/60f74782-3a66-437b-b838-f83e25813a14/60f74782-3a66-437b-b838-f83e25813a142.gif)
![SQL攻擊的分析與防范_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/5/60f74782-3a66-437b-b838-f83e25813a14/60f74782-3a66-437b-b838-f83e25813a143.gif)
![SQL攻擊的分析與防范_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/5/60f74782-3a66-437b-b838-f83e25813a14/60f74782-3a66-437b-b838-f83e25813a144.gif)
![SQL攻擊的分析與防范_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/5/60f74782-3a66-437b-b838-f83e25813a14/60f74782-3a66-437b-b838-f83e25813a145.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、sql攻擊的分析與防范 摘 要 自進(jìn)入2008年以來(lái),網(wǎng)絡(luò)界經(jīng)受了前所未有的sql注入式攻擊,這些網(wǎng)站的頁(yè)面被修改、數(shù)據(jù)庫(kù)被刪除或程序被植入惡意代碼。給這些網(wǎng)站帶來(lái)巨大的損失。本文結(jié)合多年的網(wǎng)站程序設(shè)計(jì)與維護(hù)的經(jīng)驗(yàn)來(lái)談?wù)剆ql注入式攻擊的一般原理、注入方法及防范措施。關(guān)鍵字sql,注入,攻擊,方法,防范,安全近來(lái),當(dāng)打開(kāi)網(wǎng)站,查看網(wǎng)頁(yè)新聞時(shí),會(huì)看到一系列有關(guān)sql注入攻擊的新聞:1月,自動(dòng)sql注入攻擊了超過(guò)70,000個(gè)美國(guó)網(wǎng)站。4月,f-secure表示其發(fā)現(xiàn)超過(guò)五十萬(wàn)網(wǎng)頁(yè)都被惡意javascript代碼攻擊。7月,索尼游戲機(jī)playstation(ps)的美國(guó)網(wǎng)站遭到sql注入
2、攻擊。10月,adobe旗下網(wǎng)站遭受sql注入攻擊??梢?jiàn),sql注入攻擊的危害十分巨大。但sql注入攻擊也不是洪水猛獸,只要在開(kāi)發(fā)web程序時(shí)多加防范,就可以減少sql注入攻擊的威脅。本文從原理上分析實(shí)現(xiàn)sql注入的一般方法,并根據(jù)這些方法提出相應(yīng)的防范措施,為web程序的開(kāi)發(fā)提供一些幫助。一、sql注入原理?yè)?jù)統(tǒng)計(jì),目前國(guó)內(nèi)80%以上的網(wǎng)站都是采用web動(dòng)態(tài)網(wǎng)頁(yè)結(jié)合后臺(tái)數(shù)據(jù)庫(kù)架設(shè)而成的。網(wǎng)頁(yè)先從用戶(hù)的請(qǐng)求中得到某些參數(shù),然后動(dòng)態(tài)地生成sql語(yǔ)句請(qǐng)求發(fā)送給數(shù)據(jù)庫(kù),再把從數(shù)據(jù)庫(kù)中得到的結(jié)果返回給網(wǎng)頁(yè),從而完成網(wǎng)頁(yè)執(zhí)行的功能。然而,在許多web網(wǎng)站系統(tǒng)開(kāi)發(fā)過(guò)程中,由于程序員編寫(xiě)的代碼沒(méi)有對(duì)用戶(hù)輸入數(shù)
3、據(jù)的合法性進(jìn)行判斷,造成應(yīng)用程序存在安全隱患。惡意攻擊者可以利用用戶(hù)可提交或可修改的數(shù)據(jù),構(gòu)造出特殊目的sql語(yǔ)句,并將其插入到系統(tǒng)實(shí)際執(zhí)行的sql語(yǔ)句中,從而隨意獲取數(shù)據(jù)庫(kù)中的重要信息(如管理員用戶(hù)名和密碼等),修改、添加和刪除數(shù)據(jù)庫(kù),甚至控制整個(gè)網(wǎng)站服務(wù)器。這就是所謂的sql injection,即sql注入式攻擊,簡(jiǎn)稱(chēng)sql注入。簡(jiǎn)單地說(shuō),所謂sql注入漏洞就是用戶(hù)可提交構(gòu)造特殊的sql語(yǔ)句并得到執(zhí)行的情形。所謂sql注入攻擊,就是利用sql注入漏洞,非法獲取數(shù)據(jù)庫(kù)信息,或者入侵網(wǎng)站服務(wù)器的行為。安全專(zhuān)家提示:sql注入是從正常的www端口進(jìn)行訪問(wèn)網(wǎng)站,表面上看跟一般的web頁(yè)面訪問(wèn)沒(méi)什
4、么區(qū)別,所以目前市面上的防火墻都不會(huì)對(duì)sql注入發(fā)出警報(bào),如果管理員沒(méi)查看iis日志的習(xí)慣,可能被入侵很長(zhǎng)時(shí)間都不會(huì)察覺(jué),從而造成數(shù)據(jù)的泄漏,給網(wǎng)站帶來(lái)巨大損失。并且隨著web2.0功能得到增強(qiáng),sql注入漏洞的風(fēng)險(xiǎn)也隨之加大,黑客也在不斷優(yōu)化他們的攻擊手段和工具。二、sql注入方法1.收集程序及服務(wù)器信息。在沒(méi)有設(shè)置防注入的網(wǎng)站中,可以通過(guò)默認(rèn)鏈接正常打開(kāi)新的頁(yè)面(測(cè)試地址:./test1/news/show.asp?id=78),但是在這個(gè)地址后面加上單引號(hào)“'”,服務(wù)器將會(huì)返回下面的錯(cuò)誤提示:microsoft jet database engine 錯(cuò)誤 '80040e
5、14' 字符串的語(yǔ)法錯(cuò)誤 在查詢(xún)表達(dá)式 'id = 78'' 中。 /news/shown.asp,行 6 通過(guò)這個(gè)錯(cuò)誤提示,能獲取以下幾點(diǎn)信息:(1).該網(wǎng)站使用的是access數(shù)據(jù)庫(kù),通過(guò)jet引擎連接數(shù)據(jù)庫(kù),而不是通過(guò)odbc。(2).程序沒(méi)有判斷客戶(hù)端提交的數(shù)據(jù)是否符合程序要求。(3).該sql語(yǔ)句所查詢(xún)的表中有一名為id的字段。根據(jù)這些提示信息,就可以進(jìn)一步進(jìn)行sql注入測(cè)試。2獲取后繼頁(yè)面信息在asp程序中,往往利用querystring參數(shù)進(jìn)行不同頁(yè)面之間的數(shù)據(jù)傳遞,在要打開(kāi)新的鏈接時(shí),asp服務(wù)器先從url中提取出querystring參數(shù)中的i
6、d值,然后根據(jù)id值動(dòng)態(tài)生成后繼頁(yè)面。如有以下代碼:id = request("id")sql = "select * from news where id=" & idset rs = server.createobject("adodb.recordset")rs.open sql, "dsn=."do while not rs.eofresponse.write rs("content")rs.movenextloopset rs = nothin在一般情況下,此asp腳本能夠顯示
7、具有特定id值的文章的內(nèi)容( ./test1 /news/shown.asp?id=78),而 id 值是由url中的 querystring 參數(shù)指定的。然而此段代碼存在sql注入攻擊漏洞。某些惡意用戶(hù)可以把querystring中的id值偷換為“78 or 1=1”,則原url變?yōu)椋?/test1/news/shown.asp?id=78 or 1=1,從而誘使asp腳本生成不安全的sql指令如下:select * from news where id=0 or 1=1因1=1永遠(yuǎn)成立,所以原sql指令等效為:select * from news于是,數(shù)據(jù)庫(kù)將會(huì)返回所有文章的內(nèi)容。當(dāng)然,本
8、例中服務(wù)器所受的攻擊只是文章信息的泄漏,并不會(huì)引起很?chē)?yán)重后果。但是,如果攻擊者用同樣的手段發(fā)送delete等sql指令有可能把表里的內(nèi)容全部刪除。3非法成功提交表單sql注入攻擊除了可以通過(guò)url實(shí)現(xiàn)外,還可以通過(guò)頁(yè)面中的表單實(shí)現(xiàn),而且通過(guò)表單提交的sql注入攻擊在方式上更加靈活,危害也更大。比如在設(shè)計(jì)用戶(hù)登錄頁(yè)面時(shí),正常的做法是在登錄頁(yè)面中設(shè)計(jì)一表單,要求用戶(hù)在表單中提交用戶(hù)名(username)和密碼(password),只有當(dāng)用戶(hù)名和密碼均正確時(shí)才能通過(guò)驗(yàn)證。假定有兩個(gè)頁(yè)面:一個(gè)登錄頁(yè)面 (./test1/userlogin/index.asp) 用于登錄,另一個(gè)審核頁(yè)面(./test1
9、/userlogin/logincheck.asp) 用于驗(yàn)證用戶(hù)權(quán)限(即向數(shù)據(jù)庫(kù)查詢(xún)用戶(hù)名/密碼組合是否存在)。(1).登錄頁(yè)面<form action=" logincheck.asp " method="post"> username: <input type="text" name="username"><br>password: <input type="password" name="password"><br
10、><input type="submit"> </form> (2).審核頁(yè)面user = request ("username")psd = request ("password")sql = "select * from users where username='" & user & "' and password='" & psd & "'"set rs = server.c
11、reateobject("adodb.recordset")rs.open sql, "dsn=."if (rs.eof) thenresponse. .redirect "admin.asp"elseresponse.redirect "err.asp"end ifset rs = nothing初看,審核頁(yè)面的代碼似乎沒(méi)有任何安全漏洞,因?yàn)橛脩?hù)如果不給出有效的用戶(hù)名密碼組合就無(wú)法登錄。然而,正是這段代碼成了sql注入攻擊的理想目標(biāo)。攻擊者可以在表單的用戶(hù)名或密碼欄中輸入包含“or”和“=”等的特殊字符,于是,提
12、交給數(shù)據(jù)庫(kù)的sql指令就可能變成: sql = "select * from users where username=* or 1=1 and password =* or 1=1根據(jù)前述,可以知道,sql 服務(wù)器將返回包含users表格中的所有記錄的記錄集,但在此處設(shè)計(jì)者往往不會(huì)設(shè)計(jì)循環(huán)查詢(xún),所以asp腳本將會(huì)以u(píng)sers表中的第一條記錄的身份允許其登錄網(wǎng)站,而在很多網(wǎng)站中的第一條記錄的用戶(hù)名往往就是admin!因此,登錄后你便可以管理整個(gè)網(wǎng)站的資源。即在不知道用戶(hù)名和密碼的情況下,服務(wù)器通過(guò)驗(yàn)證。從而繞過(guò)服務(wù)器的條件審查而非法登錄網(wǎng)站,實(shí)現(xiàn)sql注入。例如:在網(wǎng)站的后臺(tái)管理用戶(hù)
13、登錄時(shí)(測(cè)試地址:./test1/userlogin/index.asp),將字符串“a' or 1=1 or '1”作為用戶(hù)名和密碼提交則成功繞過(guò)密碼審核而直接登錄。三、sql注入防范為了防止sql注入造成數(shù)據(jù)泄漏,可以采用相應(yīng)的措施來(lái)加強(qiáng)網(wǎng)站的安全。1.關(guān)閉錯(cuò)誤信息提示如在第一例中,只要在服務(wù)器上的iis管理器中做如下設(shè)置,右擊站點(diǎn),在彈出的菜單中選擇屬性,在彈出的對(duì)話(huà)框的主目錄選項(xiàng)卡中單擊配置,在應(yīng)用程序配置對(duì)話(huà)框的調(diào)試選項(xiàng)卡中的“腳本錯(cuò)誤的錯(cuò)誤信息”選項(xiàng)中選擇“向客戶(hù)端發(fā)送下列文本錯(cuò)誤消息(t):”并可設(shè)置簡(jiǎn)單的文本提示,也可以使用默認(rèn)的提示文本。這時(shí),別人就無(wú)法通過(guò)a
14、sp的錯(cuò)誤信息來(lái)獲得有關(guān)服務(wù)器及數(shù)據(jù)庫(kù)等的相關(guān)信息了。2.防止通過(guò)url注入對(duì)通過(guò)querystring參數(shù)進(jìn)行傳遞id時(shí),根據(jù)id是數(shù)字的特性,可以把querystring參數(shù)進(jìn)行限定:一是限定為數(shù)字字符(函數(shù):isnumeric),二是限定長(zhǎng)度。如果可以預(yù)見(jiàn)最大的記錄數(shù)(假定為9999),那么就可以把querystring參數(shù)的長(zhǎng)度限定在4位。對(duì)于需在不同頁(yè)面間進(jìn)行傳送用戶(hù)名、密碼及權(quán)限等其它信息時(shí),則不建議采用querystring參數(shù)在url中顯式傳送,而應(yīng)該采用cookif或session進(jìn)行隱式傳送。另外,session數(shù)據(jù)是不寫(xiě)入本地硬盤(pán)的,隨網(wǎng)頁(yè)的關(guān)閉而失效,因此安全性上高于c
15、ookie。3.防止構(gòu)造非法sql命令在網(wǎng)站中數(shù)據(jù)的提交往往是通過(guò)表單來(lái)進(jìn)行的,對(duì)于用戶(hù)名、密碼,可以指定用戶(hù)所使用的字符集及字符串長(zhǎng)度。但對(duì)于文章就無(wú)法指定用戶(hù)所使用的字符集及字符串長(zhǎng)度了??梢允褂锰鎿Q法替換掉一些特定的字符,使這些字符在html的頁(yè)面中可以正常顯示,但在sql命令中卻無(wú)法識(shí)別。如:if not isnull(htmlstr) then htmlstr = replace(htmlstr, ">", ">") htmlstr = replace(htmlstr, "<", "&am
16、p;lt;") htmlstr = replace(htmlstr, chr(32), "<i></i> ") htmlstr = replace(htmlstr, chr(9), " ") htmlstr = replace(htmlstr, chr(34), """) htmlstr = replace(htmlstr, chr(39), "'") htmlstr = replace(htmlstr, chr
17、(13), "") htmlstr = replace(htmlstr, chr(10) & chr(10), "</p><p> ") htmlstr = replace(htmlstr, chr(10), "<br> ") htmlcode = htmlstrend if4.杜絕sql注入在數(shù)據(jù)庫(kù)連接文件中加入防注入代碼,在連接數(shù)據(jù)庫(kù)文件之前就對(duì)一些特定的字符或字符串進(jìn)行攔截。http中的請(qǐng)求一般是通過(guò)get或者post來(lái)發(fā)送的,所以只要過(guò)濾掉get或者post請(qǐng)求參數(shù)信息中所有的非法字符
18、即可。(1). 定義非法字符串首先,要定義請(qǐng)求中不能包含字符串,各個(gè)字符串用"|"隔開(kāi):dim sql_injdatasql_injdata = "|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"sql_inj = split(sql_injdata,"|")(2).get的攔截:if request.querystring"" thenfor each sql_get in request.querystringfor sql_data=0 to ubound(sql_inj)if instr(request.querystring(sql_get),sql_inj(sql_data)0 then response.write "script language=”javascript”alert(sql防注入系統(tǒng)提示nn請(qǐng)不要在參數(shù)中包含非法字符嘗試注入!);history.back(-1)/script"response.endend ifnextnextend if(3).plst的攔截實(shí)現(xiàn)了get請(qǐng)求的注入攔截后,可以用同樣的方法來(lái)實(shí)現(xiàn)pos
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年調(diào)脂抗動(dòng)脈粥樣硬化藥項(xiàng)目提案報(bào)告模范
- 2025年輸注延長(zhǎng)管項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年衛(wèi)生巾供應(yīng)合同格式
- 2025年加工服務(wù)協(xié)作協(xié)議模板
- 2025年合作研發(fā)新范本協(xié)議書(shū)
- 2025年個(gè)人房產(chǎn)購(gòu)買(mǎi)協(xié)議標(biāo)準(zhǔn)文本
- 2025年農(nóng)村住宅用地互易協(xié)議標(biāo)準(zhǔn)化
- 2025年電氣安裝工程策劃合作框架協(xié)議范本提供
- 2025年修理廠技術(shù)師傅指導(dǎo)學(xué)徒合同
- 2025年信用卡消費(fèi)抵押貸款協(xié)議書(shū)
- 小學(xué)二年級(jí)部編人教版上冊(cè)語(yǔ)文期末整理復(fù)習(xí)題
- 東華醫(yī)院麻醉科QoR-40隨訪表
- 2022年全國(guó)新高考Ⅰ卷:馮至《江上》
- DB51∕T 2767-2021 安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系通則
- 反興奮劑考試試題與解析
- 建筑工程材料取樣及收費(fèi)標(biāo)準(zhǔn)
- 堤壩工程施工組織設(shè)計(jì)
- CPIM BSCM__v3_0_VC(課堂PPT)
- 常用的螺紋底孔及公差規(guī)定
- 會(huì)議審批表模板
- 空調(diào)線路安裝施工方案與技術(shù)措施
評(píng)論
0/150
提交評(píng)論