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