SQL注入是什么以及如何簡單的防止SQL注入

2020-02-04 15:44:13 濟南網站建設
網站安全系列之SQL注入是一個漏洞,攻擊者可以利用該漏洞在數據庫上執行欺詐性的SQL代碼,從而不管用戶的權限如何,都可以訪問,修改或刪除數據。成功的注入攻擊可以允許篡改帳戶,創建具有管理員權限的帳戶,訪問服務器的所有數據或對數據進行修改/破壞以使其無法使用。
當用戶輸入傳遞到可以更改查詢方向的基礎SQL查詢時,就會出現此漏洞。例如,在下面的代碼中,該代碼應列出所有具有特定名稱(userName)的用戶,并且這些代碼均來自HTML表單:
語句=“ SELECT * FROM用戶,其中name ='” + userName +“';”
如果用戶輸入正確的名稱,它將按預期工作。但是,惡意用戶可以完全通過更改此SQL查詢的含義來獲得以下查詢,只需添加以下粗體字作為名稱即可,此修改后的查詢將創建一個有效的SQL查詢,該查詢將刪除該SQL查詢的名稱。表格,users然后選擇表格中的所有數據userinfo(顯示每個用戶的信息)。由于注入的文本('a';)的開始將完成原始查詢(這' 是在SQL中用于分隔文本字符串的符號),因此所有這一切都成為可能。
SELECT * FROM users where where name =' a'; DROP TABLE users; SELECT * FROM userinfo WHERE't'='t ';
避免這種攻擊的方法是確保從用戶傳輸到SQL查詢的任何輸入都不會更改此查詢的性質。一種方法是在SQL中具有特殊含義的情況下,從用戶輸入中轉義所有字符。
注意:SQL查詢將符號'作為文本字符串的開頭和結尾。通過添加字符,我們將“轉義”該符號,并告訴SQL將其視為字符串的簡單部分。
在下面的請求中,我們對字符'進行了轉義。因此,SQL將把完整的字符串(粗體)解釋為一個名稱(確實是一個奇怪的名稱,但無害)。
SELECT * FROM users where where name =' a '; DROP TABLE users; SELECT * FROM userinfo WHERE 't '= 't' ;
網站框架通常負責為您轉義這些字符。例如,Django確保從用戶傳遞到模型的任何輸入均被轉義。
 
下面介紹一些簡單的防止sql注入的方法
 
SQL注入的主要原因是程序沒有嚴格過濾用戶輸入的數據,導致非法數據侵入系統。
 
1) 對用戶輸入的特殊字符進行嚴格過濾,如’、”、<、>、/、*、;、+、-、&、|、(、)、and、or、select、union。
2) 使用參數化查詢(PreparedStatement),避免將未經過濾的輸入直接拼接到SQL查詢語句中。
3) Web應用中用于連接數據庫的用戶與數據庫的系統管理員用戶的權限有嚴格的區分(如不能執行drop等),并設置Web應用中用于連接數據庫的用戶不允許操作其他數據庫。
4) 設置Web應用中用于連接數據庫的用戶對Web目錄不允許有寫權限。使用Web應用防火墻。

SQL注入

相關文章

十大色情片电影