Mybatis的orderby引起的sql注入

2021-09-24 21:27:03 字數 482 閱讀 1831

sql中兩種傳引數的方式:

# 這種是經過預編譯的,不會有sql注入

$ 這種僅僅取變數的值,可以有sql注入

但是在orderby中之能用$,用#會導致排序不生效。

例如,傳入值為name時

用 select * from student order by #會變成:

select * from student order by "name"

用 select * from student order by $會變成:

select * from student order by name

常見的解決orderby的sql注入的方式:

手動過濾,新增白名單

其它用到$符號的場景:

當資料庫分表的時候,**很多,不會把表名寫死,改用$傳入

解決mybatis中order by排序無效問題

1 將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是i程式設計客棧d,則解析成的sql為order by id 2 將傳入的資料直接顯示生成在sql中。如 order by 如果傳...

order by排序的用法

一 order by 1 其實1表示第乙個字段,2表示第二字段 依此類推,當表中只有2個字段時,oder by 3就會出錯,這個跟order by 列名沒有什麼區別,不過在特殊情況下還是很有用的.select owner,table name,tablespace name,blocks,last ...

ORDER BY 多個條件

order子句按乙個或多個 最多16個 字段排序查詢結果,可以是公升序 asc 也可以是降序 desc 預設是公升序。order子句通常放在sql語句的最後。order子句中定義了多個字段,則按照欄位的先後順序排序。例 select productname,unitprice,unitinstock...