1. 程式人生 > >mybatis ${} sql注入

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測試 發現了有過濾,經過多測實驗後,發現去掉空格就可以 然後開始構造,我們可以使用/**/