1. 程式人生 > 其它 >MyBatis-sql注入問題

MyBatis-sql注入問題

1、什麼是SQL注入?​

SQL注入攻擊,簡稱SQL攻擊或注入攻擊,是發生於應用程式之資料庫層的安全漏洞。簡而言之,是在輸入的字串之中注入SQL指令,在設計不良的程式當中忽略了檢查,那麼這些注入進去的指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此遭到破壞或是入侵。

最常見的就是我們在應用程式中使用字串聯結方式組合 SQL 指令,有心之人就會寫一些特殊的符號,惡意篡改原本的 SQL 語法的作用,達到注入攻擊的目的。

舉個栗子:

比如驗證使用者登入需要 username 和 password,編寫的 SQL 語句如下:

select * from user where (name =
'"+ username +"') and (pw = '"+ password +"');

username 和 password 欄位被惡意填入

username = "1' OR '1'='1";

password = "1' OR '1'='1";

將導致原來的SQL字串被填為:

select * from user where (name = '1' or '1'='1') and (pw = '1' or '1'='1');

實際上執行的SQL語句將變成:

select * from user;

也就是不再需要 username 和 password 賬密即達到登入的目的,結果不言而喻。

2、Mybatis解決SQL注入問題

我們使用 mybatis 編寫 SQL 語句時,難免會使用模糊查詢的方法,mybatis 提供了兩種方式 #{} 和 ${} 。

  • #{value} 在預處理時,會把引數部分用一個佔位符 ? 替代,其中 value 表示接受輸入引數的名稱。能有效解決 SQL 注入問題
  • ${} 表示使用拼接字串,將接受到引數的內容不加任何修飾符拼接在 SQL 中,使用${}拼接 sql,將引起 SQL 注入問題。