mysql中 ${param}與#{param}使用區(qū)別
${param}傳遞的參數(shù)會(huì)被當(dāng)成sql語(yǔ)句中的一部分,比如傳遞表名,字段名
例子:(傳入值為id)
order by ${param}
則解析成的sql為:
order by id
#{parm}傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)
例子:(傳入值為id)
select * from table where name = #{param}
則解析成的sql為:
select * from table where name = 'id'
為了安全,能用#的地方就用#方式傳參,這樣可以有效的防止sql注入攻擊
sql注入簡(jiǎn)介
直接上了百度的例子,感覺(jué)一看就清晰明了
某個(gè)網(wǎng)站的登錄驗(yàn)證的SQL查詢代碼為:
strSQL = 'SELECT * FROM users WHERE (name = ’' + userName + '’) and (pw = ’'+ passWord +'’);'
惡意填入userName = '1’ OR ’1’=’1';與passWord = '1’ OR ’1’=’1';時(shí),將導(dǎo)致原本的SQL字符串被填為strSQL = 'SELECT * FROM users WHERE (name = ’1’ OR ’1’=’1’) and (pw = ’1’ OR ’1’=’1’); '也就是實(shí)際上運(yùn)行的SQL命令會(huì)變成下面這樣的strSQL = 'SELECT * FROM users;'
這樣在后臺(tái)帳號(hào)驗(yàn)證的時(shí)候巧妙地繞過(guò)了檢驗(yàn),達(dá)到無(wú)賬號(hào)密碼,亦可登錄網(wǎng)站。所以SQL注入攻擊被俗稱為黑客的填空游戲。
到此這篇關(guān)于mysql中 ${param}與#{param}使用區(qū)別的文章就介紹到這了,更多相關(guān)mysql中 ${param}與#{param}區(qū)別內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. MariaDB中1045權(quán)限錯(cuò)誤導(dǎo)致拒絕用戶訪問(wèn)的錯(cuò)誤解決方法2. Sql Server 壓縮數(shù)據(jù)庫(kù)日志文件的方法3. 什么是Access數(shù)據(jù)庫(kù)4. DB2 V9.5工作負(fù)載管理之閾值(THRESHOLD)5. Oracle數(shù)據(jù)庫(kù)的兩種授權(quán)收費(fèi)方式詳解6. Microsoft Office Access刪除表記錄的方法7. Microsoft Office Access凍結(jié)字段的方法8. 實(shí)例講解MySQL 慢查詢9. MySQL中建表時(shí)可空(NULL)和非空(NOT NULL)的用法詳解10. mybatis 運(yùn)行時(shí)加載自定義mapper文件方式

網(wǎng)公網(wǎng)安備