【Java--SQL】${}與#{}區別和危害

目錄

一區別

二SQL${}注入問題

一區別

在MyBatis中,#{}和${}是兩種不同的參數占位符用于在SQL語句中引用變量或參數。它們的區別如下:

1.#{}占位符(預編譯):#{}是MyBatis中的預編譯占位符,它會把傳入的參數值自動進行預編譯處理,以防止SQL注入攻擊。#{}占位符會將參數值作為一個占位符傳遞給數據庫驅動程序,驅動程序會將其轉化為一個預編譯的參數并進行安全處理,在執行SQL語句時,會將參數通過參數設置語句傳遞給數據庫。

2.${}占位符(字符串拼接):${}是Mybatis中的字符串拼接占位符,它會直接傳入的參數值拼接到SQL語句中。${}占位符會將參數值直接替換到生成的SQL語句中,這種方式比較靈活,可以動態拼接SQL語句的各個部分。

綜上所述,#{}占位符提供了更高的安全性,適合用于參數值的傳遞而${}占位符具有更高的靈活性的,適合用于動態拼接SQL語句的各個部分,在使用占位符時,應根據具體的需求選擇合適的方式,并注意參數值的安全。

簡單來說#{}就是預編譯處理${}是字符替換

預編譯處理:是指MyBatis在處理的#{}時,就是把的#{}替換成了?號,使用PreparedStatement的set方法來賦值。也就是說#{}會把{}內的整體看成value,最后再給value加上單引號,重點強調引號內部是一個整體(#{}不會發生SQL注入的根本原因)。

二SQL${}注入問題

xml文件

<mapper namespace="com.caicode.dao.UserDao"><select id="query" resultType="com.caicode.entity.UserEntity">select * from user where sname = '${param1}' and spassword = '${param2}'</select>
</mapper>

?測試代碼

public static void main(String[] args) throws IOException {UserEntity userEntity = new UserService().queryOne("lisi","' or 1 = '1");System.out.println("登錄狀態:"+(userEntity == null?"失敗":"成功"));}

?sql最終的結果

select * from user where sname = 'Lisi' and spassword = '' or 1 = '1'

可以看到把符合結果的數據全部查詢出來了,總共11條

而正常來說我們的一般輸入是這樣的

public static void main(String[] args) throws IOException {UserEntity userEntity = new UserService().queryOne("zhangsan","123qwe");System.out.println("登錄狀態:"+(userEntity == null?"失敗":"成功"));}

?這樣輸入的話,最終的結果是一條。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86825.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86825.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【科技核心期刊推薦】計算機與數字工程

【論文發表利器】《計算機技術與工程應用》——工程技術領域的學術新天地&#xff01; 作為計算機技術與工程應用交叉領域的前沿期刊&#xff0c;《計算機技術與工程應用》期刊&#xff0c;聚焦算法、系統結構、信息融合與安全、圖像處理等方向&#xff0c;為學術界提供了一個…

導出docker-compse.yml中docker鏡像成tar文件

#!/bin/bash # 確保腳本在正確的目錄下運行 SCRIPT_DIR$(dirname "$(realpath "$0")") cd "$SCRIPT_DIR" || exit 1 # 定義docker-compose文件路徑 COMPOSE_FILE"${SCRIPT_DIR}/docker-compose.yml" # 創建導出目錄 EXPORT_DIR"$…

ECMAScript 2019(ES2019):數組與對象操作的精細化升級

1.版本背景與發布 發布時間&#xff1a;2019年6月&#xff0c;由ECMA International正式發布&#xff0c;標準編號為ECMA-262 10th Edition。歷史意義&#xff1a;作為ES6之后的第四次年度更新&#xff0c;ES2019聚焦于數組、對象和字符串操作的精細化改進&#xff0c;提升開發…

2.1.1 配置堡壘機以控制Linux資產文件傳輸

文章目錄 一、試題及考試說明二、操作步驟1. 啟動JumpServer服務&#xff0c;瀏覽器登錄&#xff08;admin/Sjtu1896&#xff09;2. 創建堡壘機用戶&#xff0c;用戶名為“ops01”格式命名&#xff0c;郵箱以為“ops01jumpserver.cn”&#xff0c;使用密碼“admin123”&#xf…

react ant-design通用頁面自適應適配不同分辨率屏幕的方法工具類

該方法會根據 目標分辨率&#xff08;options.width/height&#xff09; 和 當前窗口尺寸&#xff08;innerWidth/innerHeight&#xff09; 計算縮放比例&#xff0c;并保持 等比例縮放&#xff08;Math.min(scaleX, scaleY)&#xff09;&#xff0c;確保內容不變形&#xff1a…

基于IEC61499實現的工業機器視覺方案

1.什么是機器視覺 機器視覺就是賦予機器看懂圖像的能力。它是一門涉及人工智能、計算機科學、圖像處理、光學、機械工程和自動化的交叉技術領域。核心目標是&#xff1a;通過攝像頭或其他成像設備獲取圖像或視頻&#xff0c;然后利用計算機算法對這些圖像進行分析和理解&#x…

機電一體化論文寫作實戰指南:從創新設計到工程驗證的完整路徑

機電論文的“技術-表達”鴻溝 某高校團隊研發的智能抓取系統實物表現優異&#xff0c;卻被審稿人質疑&#xff1a; “未說明機電耦合設計對性能的影響”——這揭示了機電一體化研究的核心痛點&#xff1a;強工程弱理論。本文基于217篇高影響力論文&#xff0c;拆解從技術到寫作…

MySQL 配置參數調優:根據工作負載調整服務器設置

MySQL 數據庫的默認配置參數是為了適應各種通用場景而設定的,它們通常無法最大化發揮服務器硬件的潛力,也無法完全匹配特定應用程序的工作負載。一個未優化的 MySQL 配置,在面對高并發、大數據量或特定查詢模式時,很容易成為系統性能的瓶頸。 配置參數調優,就是根據你的服…

嵌入式Linux驅動開發基礎-2 LED驅動

imx6ull中GPIO涉及寄存器 1&#xff1a;CCM寄存器 GPIOx 要用 CCM_CCGRy 寄存器中的 2 位來決定該組 GPIO 是否使能。哪組 GPIO 用哪個 CCM_CCGR 寄存器來設置。 CCM_CCGR 寄存器中某 2 位的取值含義如下&#xff1a; 00 &#xff1a;該 GPIO 模塊全程被關閉 01 &…

深度解析】使用Go語言實現JWT:從原理到實踐

JWT&#xff08;JSON Web Token&#xff09;已成為現代Web應用中身份驗證的基石。本文深入剖析如何用Go語言實現JWT&#xff0c;從基礎概念、底層機制到完整代碼實踐&#xff0c;助你全面掌握。 一、JWT概述 JWT是一種開放標準&#xff08;RFC 7519&#xff09;&#xff0c;用…

深入解讀 DeepSeek-V3 架構及落地的挑戰

從多專家架構&#xff08;MoE&#xff09;到模型落地實戰的一線觀察 一、引言&#xff1a;DeepSeek-V3 是什么&#xff1f; 在大模型百花齊放的今天&#xff0c;DeepSeek-V3 作為 DeepSeek 系列的第三代開源模型&#xff0c;不僅延續了高質量對話能力&#xff0c;還在架構上邁…

前端進階之路-從傳統前端到VUE-JS(第二期-VUE-JS框架結構分析)

經過上期內容的學習&#xff0c;我們已經可以構建一個VUE-CLI框架了&#xff0c;接下來我們分析一下這個框架&#xff0c;畢竟知己知彼&#xff0c;百戰百勝 我們創建完成后可以看到以下內容 接下來我們分析一下他的文件結構 node_modules用于存放項目所依賴的第三方模塊和包…

網絡協議 / 加密 / 簽名總結

加密方式&#xff1a; 對稱加密&#xff1a;key 不可公開。 非對稱加密&#xff1a;公鑰加密的信息只有私鑰能解密。私鑰加密的信息只有公鑰能解密&#xff0c;且公鑰只能解密私鑰加密的信息&#xff08;用于簽名&#xff09;。 非對稱加密應用&#xff1a; 簽名&#xff1a…

集成學習基礎:Bagging 原理與應用

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; Bagging 介紹 1. 定義與全稱&#xff1a; Bagging 是 Bootstrap Agg…

skiaSharp linux 上報錯

The type initializer for SkiaSharp.SKImageInfo threw an exception 這個錯誤表明在 Linux 系統上初始化 SkiaSharp 的 SKImageInfo 類型時出現了問題。以下是完整的解決方案&#xff1a; 安裝系統依賴&#xff1a; # Ubuntu/Debian sudo apt-get update sudo apt-get ins…

crawl4ai crawler.arun( 超時問題

delay_before_return_html500 # 單位&#xff1a;毫秒 會導致 crawler.arun 超時問題。按理說不應該 await crawler.arun( 1. 瀏覽器加載頁面 ? 2. 頁面DOM構建完成 ? 3. JavaScript執行完成 ? 4. 等待 delay_before_return_html 時間 ? (500ms) 5. 返回最終HTML內容 &…

Linux Kernel下exFat使用fallocate函數不生效問題

1&#xff09;Linux驅動開發相關問題&#xff0c;分享給將要學習或者正在學習Linux驅動開發的同學。 2&#xff09;內容屬于原創&#xff0c;若轉載&#xff0c;請說明出處。 3&#xff09;提供相關問題有償答疑和支持。 Linux下經常使用fallocate去預分配一個很大的文件空間…

大學專業科普 | 物聯網、自動化和人工智能

在選擇大學專業時&#xff0c;可以先從自身興趣、能力和職業規劃出發&#xff0c;初步確定幾個感興趣的領域。然后結合外部環境因素&#xff0c;如專業前景、教育資源和就業情況等&#xff0c;對這些專業進行深入的分析和比較。 物聯網專業 課程設置 基礎課程&#xff1a;包括…

人工智能-基礎篇-7-什么是大語言模型LLM(NLP重要分支、Transformer架構、預訓練和微調等)

大型語言模型&#xff08;Large Language Model&#xff09;。這類模型是自然語言處理&#xff08;NLP&#xff09;領域的一個重要分支&#xff0c;它們通過在大量文本數據上進行訓練來學習語言的結構和模式&#xff0c;并能夠生成高質量的文本、回答問題、完成翻譯任務等。 1…

【趙渝強老師】基于PostgreSQL的分布式數據庫:Citus

由于PostgreSQL具有強大的功能和良好的可擴展性&#xff0c;因此基于PostgreSQL很容易就可以實現分布式架構。Citus便是具體的一種實現方式。它以擴展的插件形式與PostgreSQL進行集成&#xff0c;且獨立于PostgreSQL內核&#xff0c;部署也比較簡單。Citus是現在非常流行的基于…