mysql中 ${param}與#{param}使用區(qū)別
${param}傳遞的參數(shù)會被當成sql語句中的一部分,比如傳遞表名,字段名
例子:(傳入值為id)
order by ${param}
則解析成的sql為:
order by id
#{parm}傳入的數(shù)據(jù)都當成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號
例子:(傳入值為id)
select * from table where name = #{param}
則解析成的sql為:
select * from table where name = 'id'
為了安全,能用#的地方就用#方式傳參,這樣可以有效的防止sql注入攻擊
sql注入簡介
直接上了百度的例子,感覺一看就清晰明了
某個網(wǎng)站的登錄驗證的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;'
這樣在后臺帳號驗證的時候巧妙地繞過了檢驗,達到無賬號密碼,亦可登錄網(wǎng)站。所以SQL注入攻擊被俗稱為黑客的填空游戲。
到此這篇關于mysql中 ${param}與#{param}使用區(qū)別的文章就介紹到這了,更多相關mysql中 ${param}與#{param}區(qū)別內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!
相關文章:
1. ORACLE PL/SQL 基礎2. DB2用戶定義函數(shù)實現(xiàn)多種語言的排序(1)3. SQL Server使用PIVOT與unPIVOT實現(xiàn)行列轉(zhuǎn)換4. 解決Access出現(xiàn)Microsoft JET Database Engine (0x80004005)未指定的錯誤5. SQLSERVER 的 truncate 和 delete 區(qū)別解析6. CentOS 7中成功安裝MariaDB的方法教程7. Microsoft Office Access刪除數(shù)據(jù)表關系層的方法8. DB2 V9.5工作負載管理之閾值(THRESHOLD)9. Microsoft Office Access添加圖片的方法10. 一篇文章帶你掌握SQLite3基本用法
