當sql引數化查詢遇到模糊匹配LIKE時

2021-10-23 00:24:00 字數 787 閱讀 5023

sql注入攻擊是通過將惡意的sql查詢或新增語句插入到應用的輸入引數中,再在後台sql伺服器上解析執行進行的攻擊,比如最簡單的輸入注入 『123 or 1=1』

引數化查詢是防sql注入的其中一種方式

引數化查詢是指在訪問資料庫時,在需要數值或資料的地方,使用引數來給值。即在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為sql指令的一部分來處理,而是在資料庫完成sql指令的編譯後,才套用引數執行,因此就算引數中有惡意的指令,由於已經編譯完成,就不會被資料庫執行。目前,引數化查詢是最有效可預防sql注入攻擊的的防禦方法。

使用like語句進行引數化模糊查詢時,需要使用concat函式。(在實際的使用中,條件是作為引數傳遞進來的。 所以我們使用 concat() 函式)。

假設需要模糊匹配的是字段name,其sql語句如下:

select * from table where 1=1 name like '%?name%'
通過執行語句,資料庫卻提示語法錯誤,而錯誤原因是因為引數化的時候?name最終會被字串替代;假設?name引數化時,其值為』jin』;上述語句等價如下:

select * from table where 1=1 name like '%'jin'%'
很明顯 『%』jin』%』 是非法的

正確語法如下:

select * from table where 1=1 name like concat('%',?name,'%')

使用引數化SQL語句進行模糊查詢

今天想用引數化sql語句進行模糊查詢,一開始的使用方法不正確,摸索了好一會。1 使用引數化sql語句進行模糊查詢的正確方法 定義sql語句 string sql select studentid,studentno,studentname from student where studentname...

使用引數化SQL語句進行模糊查詢

今天想用引數化sql語句進行模糊查詢,一開始的使用方法不正確,摸索了好一會。1 使用引數化sql語句進行模糊查詢的正確方法 定義sql語句 string sql select studentid,studentno,studentname from student where studentname...

MySql引數化模糊查詢

今天在做mysql模糊查詢的時候碰到一些問題,利用引數化的時候會使語法不正確,之前的錯誤 sqltwo and collegename like collegename limit index,pagesize 錯誤的語句,會導致模糊查詢出問題 因為這種寫法編譯過來是錯誤的接下來是修改後的語句 sq...