搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

精通Sql Injection技术

sql injection 應稱為 sql 指令植入式攻擊,主要是屬於 input validation 的問題。目前被翻譯成『資料隱碼』攻擊。
sql injection攻擊法並非植入電腦病毒,它是描述一個利用寫入特殊sql程式碼攻擊應用程式的動作。
換言之,只要提供給使用者輸入的介面,又沒有做到相當嚴密的輸入資料型態管制,就有可能會遭受這種行為的攻擊。
apache、iis、domino、netscape的網站系統,透過asp、php與jsp等程式碼,攻擊破壞各種sql資料庫。
影響的系統包括mssql、mysql、oracle、sybase與db2等。
一般輸入帳號密碼的網站的sql語法 select * from member where uid =  "& request("id") &"    and passwd = "& request("pwd") & "  
如果正常使用者帳號a123456789 ,密碼1234  select * from member where uid =a123456789  and passwd=1234 
輸入的帳號與密碼等資訊會取代asp( or php、jsp)中的變數,並由兩個單引號(  )所包住
select * from member where uid =  "& request("id") &"    and passwd = "& request("pwd") & "  
若攻擊者已知系統中已有一個admin的管理者帳號,則輸入admin -- ,即可不須輸入密碼而進入資料庫
select * from member where uid = admin --   and passwd =  
註: -- 符號後的任何敘述都會被當作註解 (以上面為例,and子句將被sql視為說明用)
一旦惡意使用者輸入  使用者帳號 or 1=1 --,密碼asdf1234(任意輸入)  select * from member where uid =  or 1=1 --   and passwd = asdf1234
一旦惡意使用者輸入  使用者帳號abcdefg (任意輸入) , 密碼asdf (任意輸入)  or 1=1 --  select * from member where uid = abcdefg   and passwd =  asdf  or 1=1 -- 
如何防範sql injection
網頁程式撰寫方面 
過濾輸入條件中可能隱含的sql指令,如insert、select、update等 
針對輸入條件進行規範,如無必要,應規範為僅可接受大小寫英文字母與數字等 
針對特殊的查詢參數進行過濾,如--、  等可利用replace(xx, "  ", "   ")進行替換 
進行程式寫作時,應時常檢查程式是否存在有非預期輸入資料的漏洞。
網站伺服器方面 
定期修補作業系統與網站伺服器的漏洞 
避免asp、php與jsp程式源碼洩漏,造成使用者可以直接瀏覽 
更改預設的網站虛擬路徑,如iis系統不要使用預設的c:\inetpub\wwwroot\的目錄 
不提供錯誤訊息給使用者 
攻擊者可藉由回報的錯誤訊息得知資料庫的結構 
建議將錯誤輸入重導到適當網頁 
修改c:\winnt\help\iishelp\common\500-100.asp的預設錯誤網頁
參考資料
the open web application security project http://www.owasp.org/asac/input_validation/sql.shtml 
新波科技http://www.diamondinfotech.com.tw/ 
精誠公司安全通報http://www.sysware.com.tw/news/press/020424.shtml 
台灣微軟公司關於sql injection的相關報導 
http://www.microsoft.com/taiwan/sql/sql_injection.htm 
http://www.microsoft.com/taiwan/sql/sql_injection_g1.htm 
sql server電子雜誌http://www.sqlserver.com.tw/ 

本文来自:http://211.147.7.146:88/zkbbs/new/book/sql/sqlinjection.files/frame.htm 

()

相关文章:
© 2006   www.java-asp.net