碼出高效讀書筆記:SQL注入

Q1:什麼是SQL注入?

A1:SQL注入是注入式攻擊中的常見類型,SQL注入式攻擊是未將代碼與數據進行嚴格的隔離,導致在讀取用戶數據的時候,錯誤地將數據作爲代碼的一部分執行,從而導致一些安全問題。

典型的SQL注入的例子是當對SQL語句進行字符串拼接操作時,直接使用未加轉義的用戶輸入內容作爲變量。例如:

var testCondition;             //測試內容變量
testCondition = Request.from("testCondition")
var sql = "select * from TableA where id = ' " + testCondition + " '";

上例中,如果用戶輸入的ID只是一個數字的話是沒有問題的,可以執行正常的查詢語句,但是如果在testCondition中用;將數字ID與其他的SQL語句隔開的話,就會帶來意想不到的結果,比如輸入drop、delete等。

Q2:怎麼預防SQL注入?

A2:根據SQL注入的原理,應從以下幾個方面來考慮:

  1. 過濾用戶輸入參數中的特殊字符,從而降低被SQL注入的風險。
  2. 禁止通過字符串拼接的SQL語句,嚴格使用參數綁定傳入的SQL參數。
  3. 合理使用數據庫訪問框架提供的防注入機制,比如MyBatis提供的#{ }綁定參數,從而防護SQL注入。同時一定要謹慎的使用${ },${ }相當於使用字符串拼接SQL。

要正確的使用參數化綁定SQL變量!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章