mybatis ${} sql注入
mybatis中${}的sql注入解決方案
主要解決sql的like 、in 、order by 注入問題,其他查詢也可以參照下面解決建議
首先#{}和${}在預編譯中的處理是不一樣的。
#{}在預處理時,會把引數部分用一個佔位符 ?代替,變成如下的sql語句:
select * from user where name = ?;
${}則只是簡單的字串替換,在動態解析階段,該sql語句會被解析成
select * from user where name = 'Seattle';
上面#{}的引數轉換是發生在DBMS中,而${}則發生在動態解析過程中的,所以優先使用#{},這樣就可以避免sql解析注入。
下面介紹幾種查詢避免sql注入的案例
1.模糊查詢like的兩種修復建議:
select * from user where name like '%${name}%'; /*有注入風險sql*/
處理方式1:在程式中校驗並拼接%後,直接用#格式,如下
select * from user where name like #{name}
處理方式2:在xml配置中用sql的內建函式拼接,如下
select * from user where name like concat('%',#{name},'%');
-----------------------------------------------------------------------------------------
2.in查詢的注入修復建議
select * from user where id in
<foreach collection="ids" item="item" open="("separator="," close=")">#{item}</foreach>
-----------------------------------------------------------------------------------------
3.order by修復建議
select
* from userorder
by #{name} desc
/*有問題sql*/
因為預編譯機制只能處理查詢引數,此處顯然不是查詢引數,需要開發人員自己處理。所以只能這樣拼接:
select * from userorder by ${name} desc
針對這種情況研開發人員可以通過程式來進行解決。比如制定一個規則,判斷執行此程式時是否需要排序,然後把排序的欄位傳進來,這樣比較簡單。
其實也可以在xml中處理,用if去判斷,這樣就顯得比較硬編碼,而且sql也增加了不少,不便閱讀。我覺得在程式處理好一點。
上面第一個in也可以在程式處理,但是xml處理更直觀簡單,所以我就沒寫程式處理建議。
相關推薦
php對前臺提交的表單資料做安全處理(防SQL注入和XSS攻擊等)
/** * 防sql注入字串轉義 * @param $content 要轉義內容 * @return array|string */ public static function escapeString($content) { $pa
(學習)SQL注入--寬位元組注入
SQL注入–寬位元組注入 實踐: http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1 頁面顯示: 顯然執行的查詢語句是: select id,title from news where id = '1' 其
SQL注入報錯注入函式彙總
1.floor() id = 1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a) 原理:https://b
第九屆極客大挑戰——小帥的廣告(二階sql注入)
引言:因為太想加入三葉草了,所以極客大挑戰這段時間一直在努力的學習,原來還真沒想到能在比賽中拿到排行榜第一的成績,不過現在看來努力始終都是有回報的。但我依然還是比較菜啊-.-,最近卻有很多夥伴加我好友,一來就叫我大佬,讓我深感有愧-.-,既然都想看我wp,那我就挑幾道題寫寫好了,口拙詞劣還望見諒。
SQL注入命令
sqlmap -u “http://url/news?id=1″ –current-user #獲取當前使用者名稱稱 sqlmap -u “http://www.xxoo.com/news?id=1″ –current-db #獲取當前數 據庫名稱 sqlmap -u “http://www
什麼叫做SQL注入,如何防止?
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字串,欺騙伺服器執行惡意的SQL命令。在某些表單中,使用者輸入的內容直接用來構造(或者影響)動態SQL命令,或作為儲存過程的輸入引數,這類表單特別容易受到SQL注入式攻擊。常見的SQL注入式攻擊過
滲透測試:SQL注入攻擊(ASP)
分類: 滲透測試 SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。
php用於防SQL注入的幾個函式
用於防SQL注入的幾個函式 不要相信使用者的在登陸中輸入的內容,需要對使用者的輸入進行處理 SQL注入: ' or 1=1 # 防止SQL注入的幾個函式: addslashes($string):用反斜線引用字串中的特殊字元' " \ $u
nodejs中查詢mysql防止SQL注入
Performing queries The most basic way to perform a query is to call the .query() method on an object (like a Connection, Pool, or PoolNamespace inst
在SQL注入中常用的mysql語法
user()返回當前資料庫連線使用的使用者; database()返回當前資料庫連線使用的資料庫; version()返回當前資料庫的版本; concat-ws() 函式可以將這些函式進行組合使用並顯示出來。concat函式中,將其中的引數直接連線起來產生新的字串。而在con
SQL注入的過濾程式碼分析
SQL注入:在使用者的輸入沒有為轉義字元過濾時,就會發生這樣這種形式的注入式攻擊。所以在在有SQL查詢語句的網頁中對字元的過濾時很重要的。 在沒有任何過濾時,是很危險的,使用者可以在提交的資料中,插入自己想要插入攻擊程式碼。 mysql_real_escape_strin
SQL注入——Less-1
宣告:本實驗教程僅供研究學習使用,請勿用於非法用途,違者一律自行承擔所有風險!!! 開啟主頁進入第一關,提示輸入引數id及它的值, 傳入引數
Redtiger SQL注入練習(一)
感覺會的東西太少了,以後要多練習,多寫部落格。要堅持學習,一定不能放棄,為夢想奮鬥。 redtiger 這個平臺早就開始做了,但是才做到第4關。。。。 第一關: 開啟題, 先隨便試,後來發現點選 Category 後的1 可以注入, 然後就是注入了,構造cat=1'' 還報錯,估
Redtiger SQL注入練習(二)
第六關: 點選 click me,構造url:user=1',返回user not found。user=1'',同樣。 猜測是數字型注入,構造order by , user=1 order by X#,得出有5個欄位。 然後,user=0 union select 1,2,3,4,5#,說
實驗吧 簡單的SQL注入1
解題連結: http://ctf5.shiyanbar.com/423/web/ 解題思路:一, 輸入1,不報錯;輸入1',報錯;輸入1'',不報錯。 二 , 輸入1 and 1=1,返回1 1=1,可知,and被過濾了。 三, &n
Mybatis防止sql注入原理
SQL 注入是一種程式碼注入技術,用於攻擊資料驅動的應用,惡意的SQL 語句被插入到執行的實體欄位中(例如,為了轉儲資料庫內容給攻擊者)。[摘自] SQL注入 - 維基百科SQL注入,大家都不陌生,是一種常見的攻擊方式。攻擊者在介面的表單資訊或UR
登入測試——SQL注入
登入頁面的安全性測試包含一項:防止SQL注入 什麼是SQL注入 SQL Injection:就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。 例如: 填好正確的使用者名稱(marcofly)和密碼(test)後,點選
iBatis解決自動防止sql注入
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
手工sql注入簡單入門
1、判斷是否可以注入: 數字型: 1.1在引數後面加一個引號',如果頁面報數字number錯誤,則一定不是sql注入點;如果報資料庫比如mysql、oracle之類的錯誤,則是一個sql注入點。 1.2 在引數後面加上 依次加上 and 1=1 和 and 1=2,如果加上 and 1=1 還能正常顯示原
CFT每日一題之簡單的SQL注入之二
首先,輸入1 嘗試一下 然後爆出ID 加 個 單引號 嘗試 ,出現報錯介面 然後 大概猜測程式碼是 select xx from XX where id='' 用and測試 發現了有過濾,經過多測實驗後,發現去掉空格就可以 然後開始構造,我們可以使用/**/