mysql防止sql注入的方法:1、一般使用者與系統管理者使用者的權限要嚴格地區分開;2、強迫使用者使用參數化語句;3、盡量使用SQL Server資料庫自帶的安全參數;4、對使用者輸入的內容進行驗證。
SQL Injection攻擊具有很大的危害,攻擊者可以利用它來讀取、修改或刪除資料庫內的數據,取得資料庫中的使用者名稱和密碼等敏感訊息,甚至可以獲得資料庫管理員的權限。如果能夠再利用SQLServer擴充儲存程序和自訂擴充儲存程序來執行一些系統指令,攻擊者還可以獲得該系統的控制權。
(推薦教學:mysql影片教學)
而且SQL Injection 也很難防範。網站管理員無法透過安裝系統修補程式或進行簡單的安全配置進行自我保護,一般的防火牆也無法攔截SQL Injection 攻擊。
mysql如何防止sql注入?
1. 一般使用者與系統管理員使用者的權限要有嚴格的區分。
如果一個普通使用者在使用查詢語句中嵌入另一個Drop Table語句,那麼是否允許執行呢?
由於Drop語句關係到資料庫的基本對象,故要操作這個語句使用者必須有相關的權限。在權限設計中,對於終端用戶,也就是應用軟體的使用者,沒有必要給他們資料庫物件的建立、刪除等權限。
那麼即使在他們使用SQL語句中帶有嵌入式的惡意程式碼,由於其使用者權限的限制,這些程式碼也將無法被執行。
2. 強迫使用參數化語句。
如果在寫SQL語句的時候,使用者輸入的變數不是直接嵌入SQL語句。而是透過參數來傳遞這個變數的話,那麼就可以有效的防治SQL注入式攻擊。
也就是說,使用者的輸入絕對無法直接被嵌入到SQL語句中。與此相反,使用者的輸入的內容必須進行過濾,或使用參數化的語句來傳遞使用者輸入的變數。參數化的語句使用參數而不是將使用者輸入變數嵌入SQL語句。採用這種措施,
可以杜絕大部分的SQL注入式攻擊。不過可惜的是,現在支援參數化語句的資料庫引擎並不多。不過資料庫工程師在開發產品的時候要盡量採用參數化語句。
3. 多使用SQL Server資料庫自帶的安全性參數。
為了減少注入式攻擊對於SQL Server資料庫的不良影響,在SQLServer資料庫中專門設計了相對安全的SQL參數。在資料庫設計過程中,工程師要盡量採用這些參數來杜絕惡意的SQL注入式攻擊。
如在SQL Server資料庫中提供了Parameters集合。這個集合提供了類型檢查和長度驗證的功能。如果管理員採用了Parameters這個集合的話,則使用者輸入的內容將被視為字元值而不是可執行程式碼。即使使用者輸入的內容含有可執行程式碼,則資料庫也會過濾掉。因為此時資料庫只把它當作普通的字元來處理。使用Parameters集合的另一個優點是可以強制執行類型和長度檢查,範圍以外的值將觸發異常。
如果使用者輸入的值不符合指定的類型與長度約束,就會發生異常,並報告給管理員。如上面這個案例中,如果員工編號定義的資料類型為字串型,長度為10個字元。而使用者輸入的內容雖然也是字元類型的數據,但其長度達到了20個字元。則此時就會引發異常,因為使用者輸入的內容長度超過了資料庫欄位長度的限制。
4. 加強對使用者輸入的驗證。
總體來說,防治SQL注入式攻擊可以採用兩種方法,
一是加強使用者輸入內容的檢查與驗證;二是強迫使用參數化語句來傳遞使用者輸入的內容。
在SQLServer資料庫中,有比較多的使用者輸入內容驗證工具,可以幫助管理者來對付SQL注入式攻擊。測試字串變數的內容,只接受所需的值。拒絕包含二進位資料、轉義序列和註解字元的輸入內容。這有助於防止腳本注入,防止某些緩衝區溢位攻擊。測試使用者輸入內容的大小和資料類型,強制執行適當的限制與轉換。這即有助於防止有意造成的緩衝區溢出,對於防治注入式攻擊有較明顯的效果。
如可以使用預存程序來驗證使用者的輸入。利用預存程序可以實現使用者輸入變數的過濾,例如拒絕一些特殊的符號。如以上那個惡意程式碼中,只要預存程序把那個分號過濾掉,那麼這個惡意程式碼也就沒有用武之地了。
在執行SQL語句之前,可以透過資料庫的預存程序,來拒絕接納一些特殊的符號。在不影響資料庫應用的前提下,應該讓資料庫拒絕包含以下字元的輸入。如分號分隔符,它是SQL注入式攻擊的主要幫兇。如註釋分隔符號。註釋只有在資料設計的時候才用的到。一般使用者的查詢語句中沒有必要註解的內容,故可以直接把他拒絕掉,通常情況下這麼做不會發生意外損失。把以上這些特殊符號拒絕掉,那麼即使在SQL語句中嵌入了惡意程式碼,他們也將毫無作為。
故始終透過測試類型、長度、格式和範圍來驗證使用者輸入,過濾使用者輸入的內容。這是防止SQL注入式攻擊的常見且行之有效的措施。
多層環境如何防治SQL注入式攻擊?
在多層應用程式環境中,使用者輸入的所有資料都應該在驗證之後才能被允許進入到可信任區域。
未通過驗證過程的資料應被資料庫拒絕,並向上一層傳回一個錯誤訊息。實現多層驗證。對無目的的惡意使用者採取的預防措施,對堅定的攻擊者可能無效。
更好的做法是在使用者介面和所有跨信任邊界的後續點上驗證輸入。如在客戶端應用程式中驗證資料可以防止簡單的腳本注入。
但是,如果下一層認為其輸入已通過驗證,則任何可以繞過客戶端的惡意使用者就可以不受限制地存取系統。故對於多層應用環境,在防止注入式攻擊的時候,需要各層一起努力,在客戶端與資料庫端都要採用相對應的措施來防治SQL語句的注入式攻擊。
以上是mysql如何防止sql注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!