${param}傳遞的參數會被當成sql語句中的一部分,比如傳遞表名,字段名
例子:(傳入值爲id)
order by ${param}
則解析成的sql爲:
order by id
#{parm}傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號
例子:(傳入值爲id)
select * from table where name = #{param}
則解析成的sql爲:
select * from table where name = "id"
爲了安全,能用#的地方就用#方式傳參,這樣可以有效的防止sql注入***
sql注入簡介
直接上了百度的例子,感覺一看就清晰明瞭
某個網站的登錄驗證的SQL查詢代碼爲:
strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
惡意填入
userName = "1' OR '1'='1";
與passWord = "1' OR '1'='1";
時,將導致原本的SQL字符串被填爲
strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
也就是實際上運行的SQL命令會變成下面這樣的
strSQL = "SELECT * FROM users;"
這樣在後臺帳號驗證的時候巧妙地繞過了檢驗,達到無賬號密碼,亦可登錄網站。所以SQL注入***被俗稱爲***的填空遊戲。
作者:尼古拉斯--趙四
來源:CSDN
原文:https://blog.csdn.net/a12345555555/article/details/72782172
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!