日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MyBatis防止SQL注入的方法

發布時間:2023/12/10 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis防止SQL注入的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MyBatis防止SQL注入的方法

文章目錄

  • MyBatis防止SQL注入的方法
    • 1. 前言
    • 2. 示例
    • 3. 不用MyBatis防止SQL注入的方法
    • 4. 原理
    • 5. 參考鏈接

1. 前言

????這個問題其實就是問MyBatis中的#{}和KaTeX parse error: Expected 'EOF', got '#' at position 19: …號的區別,在MyBatis中,#?{}是預編譯處理, {}是字符串替換。MyBatis在處理#{}時,會將sql中的#{}替換為?號,調用PreparedStatement的set方法來賦值;MyBatis在處理 $ { } 時,就是把 ${ } 替換成變量的值。使用 #{} 可以有效的防止SQL注入,提高系統安全性。

2. 示例

${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注入攻擊被俗稱為黑客的填空游戲。

3. 不用MyBatis防止SQL注入的方法

????使用JDBC中的******PreparedStatement******,采用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的set方法傳值即可。


????使用好處:
  • 代碼的可讀性和可維護性.
  • PreparedStatement盡最大可能提高性能.
  • 最重要的一點是極大地提高了安全性.
  • 4. 原理

    ????MyBatis防止SQL注入的原理:MyBatis在處理#{}時,會將sql中的#{}替換為?號,調用PreparedStatement的set方法來賦值 ,PreparedStatement在執行階段只是把輸入串作為數據處理,不再對sql語句進行解析,準備,因此也就避免了sql注入問題。



    ????PreparedStatement防止SQL注入的原理:JDBC的PreparedStatement會將帶’?'占位符的sql語句預先編譯好,也就是SQL引擎會預先進行語法分析,產生語法樹,生成執行計劃。對于占位符輸入的參數,無論是什么,都不會影響該SQL語句的語法結構了,因為語法分析已經完成了,即使你后面輸入了這些sql命令,也不會被當成sql命令來執行了,只會被當做字符串字面值參數。所以的sql語句預編譯可以防御SQL注入。而且在多次執行同一個SQL時,能夠提高效率。原因是SQL已編譯好,再次執行時無需再編譯。

    5. 參考鏈接

    https://blog.csdn.net/qian_qian_123/article/details/92844194
    https://www.cnblogs.com/pressur/p/11226392.html
    https://blog.csdn.net/weixin_39986856/article/details/83651847


    2022年1月6日 陰

    總結

    以上是生活随笔為你收集整理的MyBatis防止SQL注入的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。