隨著Web2.0、社交網(wǎng)絡(luò)、微博等等一系列新型的互聯(lián)網(wǎng)產(chǎn)品的誕生,基于Web環(huán)境的互聯(lián)網(wǎng)應(yīng)用越來越廣泛,企業(yè)信息化的過程中各種應(yīng)用都架設(shè)在Web平臺(tái)上,Web業(yè)務(wù)的迅速進(jìn)展也引起黑客們的強(qiáng)烈關(guān)注,接踵而至的就是Web安全威脅的凸顯,對(duì)Web服務(wù)器的攻擊可以說是形形色色、種類繁多,常見的有掛馬、SQL注入、XSS跨站腳本攻擊等。
SQL注入 所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
通過一下的例子更形象的了解SQL注入:
有一個(gè)Login畫面,在這個(gè)Login畫面上有兩個(gè)文本框分別用來輸入用戶名和密碼,當(dāng)用戶點(diǎn)了登錄按鈕的時(shí)候,會(huì)對(duì)輸入的用戶名和密碼進(jìn)行驗(yàn)證。驗(yàn)證的SQL語(yǔ)句如下:
select * from student where username='輸入的用戶名' and password='輸入的密碼'
如果能夠檢索到數(shù)據(jù),說明驗(yàn)證通過,否則驗(yàn)證不通過。
如果用戶在用戶名文本框中輸入 ' 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),可以通過正則表達(dá)式,或限制長(zhǎng)度;對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等。
2.永遠(yuǎn)不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過程進(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注入差不多,只不過SQL注入是針對(duì)數(shù)據(jù)庫(kù)的,而OS命令注入是針對(duì)操作系統(tǒng)的。OS命令注入即能夠在服務(wù)器上執(zhí)行任意命令。
如何防止OS命令注入:
1.不要調(diào)用外部程序。舉個(gè)例子,在UNIX系統(tǒng)上,有一個(gè)叫CGI的程序,可以執(zhí)行sendmail命令來發(fā)送郵件。也許你的web應(yīng)用程序也有發(fā)送郵件的功能,通過直接調(diào)用CGI程序發(fā)送郵件非常的簡(jiǎn)單,但是不要這樣做,因?yàn)樵趫?zhí)行sendmail命令的同時(shí),也會(huì)混雜進(jìn)其他OS命令,正確的做法是使用發(fā)送郵件的library。
2.過濾調(diào)、;,[,], ,<,>,\之類的符號(hào)。
3.設(shè)置用戶的權(quán)限。