SQL Injection-SQL隱碼,若直翻成中文就是SQL注射
注射什麼呢?
注射SQL的程式,也就是T-SQL,T-SQL是SQL資料庫中的程式語言,或說SQL語言,然後黑客就可以執行一些想要在資料庫中做的事情。
會受到SQL Injeciton攻擊的,其實絕對不只有微軟的ACCESS、MS-SQL。其實只要是關連式資料庫,只要是採用SQL標準的資料庫,如MySQL、Oracle等,都能夠用SQL Injection攻擊。只還是一個老問題,微軟未必弱點真的比較多,而是使用者族群比較大,所以黑客喜歡找微軟的系統下手,波及力也比較強,攻擊起來比較有成就感。當然這一點就會是許多管理者敬微軟而遠之的原因之一。
黑客最常利用SQL Injection漏洞來查詢資料庫,找尋有沒有些有用的資料,或在SQL資料庫中增加一些資料
如果這個是網站背後的資料庫,那他會增加script src= 或 iframe 等等HTML Tag之類的資料
當這些新增加的資料,被網頁程式以正常的運作流程,抓取到到網頁上呈現時,就能對瀏覽者達到XSS的攻擊
另一種則是純粹破壞資料,不過這個比較少人做。還有一種是利用資料庫中的強大功能,如xp_cmdshell等,去進而掌控整台Server,可以對整台Server的硬碟進行資料查找、修刪(所以最好把MS-SQL Server上的xp_cmdshell給關閉)。
另外一點,絕對不要在AP或網頁程式上使用最大權限的使用者帳戶來操作資料庫,因為如果真的不幸被入侵,那黑客有的就是最大權限,可以對所有的資料庫操作,到時受害的就不只是單一資料庫而已。
XSS攻擊比較危險的是,如果攻擊到的位置恰到好處,則網站業主跟瀏覽者,可能很久很久以後才會發現該網站被植入XSS攻擊語法。可怕的是這段沒人發現的時間裡,已經不知道多少人被這中XSS的網站攻擊
XSS與SQL Injection彼此間沒有直接關連,但通常是很容易連帶發生
XSS的攻擊容易利用SQL Injection去達成
XSS的方式是利用某些HTML本身具有的功能,如主動連結某一個外部網站、主動執行某些程式的特性
XSS攻擊一定要包含一個跳板才能成功,而這個跳板就是Web Server,黑客先要想辦法在這台WebServer上的網頁安插上述的那串HTML碼,安插成功後,當有任何一個瀏覽者開啟該網站被植入特殊HTML碼的網頁後,瀏覽者端就會神不知鬼不覺得連結上黑客指定好的外部網站,而這個網站就會讓該瀏覽者的電腦安裝木馬程式,或執行可能洩漏瀏覽者電腦資料等等為所欲為的動作了。
偽造發送端的攻擊
網頁程式最基本的運作模式,即為發送、接收,比方說網址後帶參數的方式,就是一種發送方式,或是表單中的input submit到另外一個網頁程式處理,這些都是發送資料的動作。這個機制下有問題的部分是在於接收端沒有檢查發送端是否是合法,也就是接收端並未確認發送端的身份,即接收資料,並處理。在這種狀況下,黑客即可偽造發送端,並略過原先發送端會有的java script等資料檢查,成功將有問題的資料送到接收端,並進入資料庫等,此時網站管理者就會發現多了很多垃圾資料。這種狀況在傳統的網頁程式語言都可能發生。
機器人發送,就是非人本身操作,而是使用一段由黑客指定好或錄製好的動作,不斷對同一個網站的某一個位置,進行填寫資料、送資料的動作。通常裡面的資料都會呈現無規則性,但密集的發送,產生大量的資料對網站運作及管理者產生困擾。
至於防範方法
SQL Injection的最大弱點是在於早期網頁程式,喜歡用組合字串的方式,組成T-SQL語法進資料庫執行。
因為組合字串的是缺乏格式的,所以可以使用T-SQL特殊字元去輕易破壞它,使的原先語法部分失效,
所以應該要在網頁程式上預先防範T-SQL內的危險字元。不過這個只是治標不治本。
而最安全又最省力的方式,如果資料庫有Store Procedure這功能可以使用的話,強烈建議使用
因為透過Store Procedure方式去執行T-SQL,因為Store Procedure是程式設計師預先設計好的資料庫程式,是經過格式過的,所以沒有組合字串的問題,即使沒有在網頁程式上過濾危險字元,危險性的T-SQL語法也絕對無法成功執行。
另一點好處,這牽涉到資料庫的管理,可以將資料庫設計成網頁僅有執行Store Procedure的權限,而無直接存取table權限。這樣做可以將資料庫的安全性更為提升,對於一些有細部管理需求的單位更適合使用。
XSS攻擊的防範,最佳的方式是把所有網頁的input物件,在程式接收時,全部將「<」「>」給置換掉,改以html替代字代替;或是在要顯示資料時時,將< >換成html替代字,這樣兩種方式都可以讓< >就無法在網頁上生效,進而達到防堵XSS對瀏覽者的攻擊。
順便說明,ASP.net其本身的input物件預設值,都是將html tag視為危險輸入,所以當有人在ASP.net網站上輸入任何html tag時,ASP.net就會回應錯誤訊息。不過這功能是可以在開發時期被關閉的,在此狀況下,XSS攻擊可能就有機可趁,網頁程式設計師要記得過濾危險字元。
偽造發送端的攻擊,應該在接收頁即檢查發送端是否合法,一般作法是檢查發送端的網址是否與接收端為同一個網站。還有程式開發時,建議除了瀏覽者端的java script檢查外,也可以在接收程式上做相同的資料檢查動作,這樣也能大幅降低攻擊成功的可能性。另外若是以ASP.net開發的,則比較不會有此問題,因為ASP.net採用以往不同的背景運作架構,可大幅避免這類問題,相對安全。
機器人發送的防範,一般會採用現在很常見的驗證碼,圖形的驗證碼,或一段亂數更換的邏輯運算,比方2+5=? 天空是什麼顏色等等,需要人類思考才能回答的問題。用這些來阻擋機器發送。另外還有一些是用程式控制多久可以發送一次資料,少於時間內是不允許發送資料出來的。不過這部分對於無障礙網頁,容易造成開發的困難,所以也有另外使用語音等方式。