




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、sql攻擊的分析與防范 摘 要 自進(jìn)入2008年以來,網(wǎng)絡(luò)界經(jīng)受了前所未有的sql注入式攻擊,這些網(wǎng)站的頁面被修改、數(shù)據(jù)庫被刪除或程序被植入惡意代碼。給這些網(wǎng)站帶來巨大的損失。本文結(jié)合多年的網(wǎng)站程序設(shè)計與維護(hù)的經(jīng)驗來談?wù)剆ql注入式攻擊的一般原理、注入方法及防范措施。關(guān)鍵字sql,注入,攻擊,方法,防范,安全近來,當(dāng)打開網(wǎng)站,查看網(wǎng)頁新聞時,會看到一系列有關(guān)sql注入攻擊的新聞:1月,自動sql注入攻擊了超過70,000個美國網(wǎng)站。4月,f-secure表示其發(fā)現(xiàn)超過五十萬網(wǎng)頁都被惡意javascript代碼攻擊。7月,索尼游戲機(jī)playstation(ps)的美國網(wǎng)站遭到sql注入
2、攻擊。10月,adobe旗下網(wǎng)站遭受sql注入攻擊。可見,sql注入攻擊的危害十分巨大。但sql注入攻擊也不是洪水猛獸,只要在開發(fā)web程序時多加防范,就可以減少sql注入攻擊的威脅。本文從原理上分析實現(xiàn)sql注入的一般方法,并根據(jù)這些方法提出相應(yīng)的防范措施,為web程序的開發(fā)提供一些幫助。一、sql注入原理據(jù)統(tǒng)計,目前國內(nèi)80%以上的網(wǎng)站都是采用web動態(tài)網(wǎng)頁結(jié)合后臺數(shù)據(jù)庫架設(shè)而成的。網(wǎng)頁先從用戶的請求中得到某些參數(shù),然后動態(tài)地生成sql語句請求發(fā)送給數(shù)據(jù)庫,再把從數(shù)據(jù)庫中得到的結(jié)果返回給網(wǎng)頁,從而完成網(wǎng)頁執(zhí)行的功能。然而,在許多web網(wǎng)站系統(tǒng)開發(fā)過程中,由于程序員編寫的代碼沒有對用戶輸入數(shù)
3、據(jù)的合法性進(jìn)行判斷,造成應(yīng)用程序存在安全隱患。惡意攻擊者可以利用用戶可提交或可修改的數(shù)據(jù),構(gòu)造出特殊目的sql語句,并將其插入到系統(tǒng)實際執(zhí)行的sql語句中,從而隨意獲取數(shù)據(jù)庫中的重要信息(如管理員用戶名和密碼等),修改、添加和刪除數(shù)據(jù)庫,甚至控制整個網(wǎng)站服務(wù)器。這就是所謂的sql injection,即sql注入式攻擊,簡稱sql注入。簡單地說,所謂sql注入漏洞就是用戶可提交構(gòu)造特殊的sql語句并得到執(zhí)行的情形。所謂sql注入攻擊,就是利用sql注入漏洞,非法獲取數(shù)據(jù)庫信息,或者入侵網(wǎng)站服務(wù)器的行為。安全專家提示:sql注入是從正常的www端口進(jìn)行訪問網(wǎng)站,表面上看跟一般的web頁面訪問沒什
4、么區(qū)別,所以目前市面上的防火墻都不會對sql注入發(fā)出警報,如果管理員沒查看iis日志的習(xí)慣,可能被入侵很長時間都不會察覺,從而造成數(shù)據(jù)的泄漏,給網(wǎng)站帶來巨大損失。并且隨著web2.0功能得到增強(qiáng),sql注入漏洞的風(fēng)險也隨之加大,黑客也在不斷優(yōu)化他們的攻擊手段和工具。二、sql注入方法1.收集程序及服務(wù)器信息。在沒有設(shè)置防注入的網(wǎng)站中,可以通過默認(rèn)鏈接正常打開新的頁面(測試地址:./test1/news/show.asp?id=78),但是在這個地址后面加上單引號“'”,服務(wù)器將會返回下面的錯誤提示:microsoft jet database engine 錯誤 '80040e
5、14' 字符串的語法錯誤 在查詢表達(dá)式 'id = 78'' 中。 /news/shown.asp,行 6 通過這個錯誤提示,能獲取以下幾點信息:(1).該網(wǎng)站使用的是access數(shù)據(jù)庫,通過jet引擎連接數(shù)據(jù)庫,而不是通過odbc。(2).程序沒有判斷客戶端提交的數(shù)據(jù)是否符合程序要求。(3).該sql語句所查詢的表中有一名為id的字段。根據(jù)這些提示信息,就可以進(jìn)一步進(jìn)行sql注入測試。2獲取后繼頁面信息在asp程序中,往往利用querystring參數(shù)進(jìn)行不同頁面之間的數(shù)據(jù)傳遞,在要打開新的鏈接時,asp服務(wù)器先從url中提取出querystring參數(shù)中的i
6、d值,然后根據(jù)id值動態(tài)生成后繼頁面。如有以下代碼: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注入攻擊漏洞。某些惡意用戶可以把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ù)庫將會返回所有文章的內(nèi)容。當(dāng)然,本
8、例中服務(wù)器所受的攻擊只是文章信息的泄漏,并不會引起很嚴(yán)重后果。但是,如果攻擊者用同樣的手段發(fā)送delete等sql指令有可能把表里的內(nèi)容全部刪除。3非法成功提交表單sql注入攻擊除了可以通過url實現(xiàn)外,還可以通過頁面中的表單實現(xiàn),而且通過表單提交的sql注入攻擊在方式上更加靈活,危害也更大。比如在設(shè)計用戶登錄頁面時,正常的做法是在登錄頁面中設(shè)計一表單,要求用戶在表單中提交用戶名(username)和密碼(password),只有當(dāng)用戶名和密碼均正確時才能通過驗證。假定有兩個頁面:一個登錄頁面 (./test1/userlogin/index.asp) 用于登錄,另一個審核頁面(./test1
9、/userlogin/logincheck.asp) 用于驗證用戶權(quán)限(即向數(shù)據(jù)庫查詢用戶名/密碼組合是否存在)。(1).登錄頁面<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).審核頁面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初看,審核頁面的代碼似乎沒有任何安全漏洞,因為用戶如果不給出有效的用戶名密碼組合就無法登錄。然而,正是這段代碼成了sql注入攻擊的理想目標(biāo)。攻擊者可以在表單的用戶名或密碼欄中輸入包含“or”和“=”等的特殊字符,于是,提
12、交給數(shù)據(jù)庫的sql指令就可能變成: sql = "select * from users where username=* or 1=1 and password =* or 1=1根據(jù)前述,可以知道,sql 服務(wù)器將返回包含users表格中的所有記錄的記錄集,但在此處設(shè)計者往往不會設(shè)計循環(huán)查詢,所以asp腳本將會以users表中的第一條記錄的身份允許其登錄網(wǎng)站,而在很多網(wǎng)站中的第一條記錄的用戶名往往就是admin!因此,登錄后你便可以管理整個網(wǎng)站的資源。即在不知道用戶名和密碼的情況下,服務(wù)器通過驗證。從而繞過服務(wù)器的條件審查而非法登錄網(wǎng)站,實現(xiàn)sql注入。例如:在網(wǎng)站的后臺管理用戶
13、登錄時(測試地址:./test1/userlogin/index.asp),將字符串“a' or 1=1 or '1”作為用戶名和密碼提交則成功繞過密碼審核而直接登錄。三、sql注入防范為了防止sql注入造成數(shù)據(jù)泄漏,可以采用相應(yīng)的措施來加強(qiáng)網(wǎng)站的安全。1.關(guān)閉錯誤信息提示如在第一例中,只要在服務(wù)器上的iis管理器中做如下設(shè)置,右擊站點,在彈出的菜單中選擇屬性,在彈出的對話框的主目錄選項卡中單擊配置,在應(yīng)用程序配置對話框的調(diào)試選項卡中的“腳本錯誤的錯誤信息”選項中選擇“向客戶端發(fā)送下列文本錯誤消息(t):”并可設(shè)置簡單的文本提示,也可以使用默認(rèn)的提示文本。這時,別人就無法通過a
14、sp的錯誤信息來獲得有關(guān)服務(wù)器及數(shù)據(jù)庫等的相關(guān)信息了。2.防止通過url注入對通過querystring參數(shù)進(jìn)行傳遞id時,根據(jù)id是數(shù)字的特性,可以把querystring參數(shù)進(jìn)行限定:一是限定為數(shù)字字符(函數(shù):isnumeric),二是限定長度。如果可以預(yù)見最大的記錄數(shù)(假定為9999),那么就可以把querystring參數(shù)的長度限定在4位。對于需在不同頁面間進(jìn)行傳送用戶名、密碼及權(quán)限等其它信息時,則不建議采用querystring參數(shù)在url中顯式傳送,而應(yīng)該采用cookif或session進(jìn)行隱式傳送。另外,session數(shù)據(jù)是不寫入本地硬盤的,隨網(wǎng)頁的關(guān)閉而失效,因此安全性上高于c
15、ookie。3.防止構(gòu)造非法sql命令在網(wǎng)站中數(shù)據(jù)的提交往往是通過表單來進(jìn)行的,對于用戶名、密碼,可以指定用戶所使用的字符集及字符串長度。但對于文章就無法指定用戶所使用的字符集及字符串長度了。可以使用替換法替換掉一些特定的字符,使這些字符在html的頁面中可以正常顯示,但在sql命令中卻無法識別。如: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ù)庫連接文件中加入防注入代碼,在連接數(shù)據(jù)庫文件之前就對一些特定的字符或字符串進(jìn)行攔截。http中的請求一般是通過get或者post來發(fā)送的,所以只要過濾掉get或者post請求參數(shù)信息中所有的非法字符
18、即可。(1). 定義非法字符串首先,要定義請求中不能包含字符串,各個字符串用"|"隔開: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請不要在參數(shù)中包含非法字符嘗試注入!);history.back(-1)/script"response.endend ifnextnextend if(3).plst的攔截實現(xiàn)了get請求的注入攔截后,可以用同樣的方法來實現(xiàn)pos
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薪酬福利調(diào)整說明書與實施方案解讀
- 綠色能源供應(yīng)協(xié)議書
- 兄妹共同出資購房合同
- 全新綠化工程協(xié)議書
- 電力行業(yè)電力供應(yīng)穩(wěn)定性免責(zé)協(xié)議
- 員工年度工作總結(jié)與未來發(fā)展規(guī)劃報告
- 項目合作方案設(shè)計建議書
- 購買公司股份協(xié)議書十
- 第二單元 社會主義制度的建立與社會主義建設(shè)的探索 大單元教學(xué)設(shè)計 2023-2024學(xué)年部編版八年級歷史下冊
- 第二單元4《古詩三首》教學(xué)設(shè)計-2024-2025學(xué)年統(tǒng)編版語文三年級上冊
- 《物理學(xué)的發(fā)展史》課件
- 2025年廣東廣州市海珠區(qū)官洲街道辦事處政府雇員招聘5人高頻重點提升(共500題)附帶答案詳解
- 《道路交通安全法》課件完整版
- 《小腸梗阻的診斷與治療中國專家共識(2023版)》解讀
- 2024屆廣東省廣州市高三一??荚囉⒄Z試題講評課件
- 切削加工中的刀具路徑規(guī)劃算法考核試卷
- 《推拿學(xué)》期末考試復(fù)習(xí)題庫(含答案)
- 2024年經(jīng)濟(jì)師考試工商管理(中級)專業(yè)知識和實務(wù)試卷及解答參考
- 10kV配電室工程施工方案設(shè)計
- 2025年中國洗衣凝珠行業(yè)市場現(xiàn)狀及投資態(tài)勢分析報告(智研咨詢)
- DB41T 2466-2023 浸水電梯使用管理規(guī)范
評論
0/150
提交評論