首頁 > 資料庫 > mysql教程 > 如何安全地在SQL LIKE語句中使用參數來防止SQL注入?

如何安全地在SQL LIKE語句中使用參數來防止SQL注入?

Mary-Kate Olsen
發布: 2024-12-31 18:03:11
原創
850 人瀏覽過

How Can I Safely Use Parameters with SQL LIKE Statements to Prevent SQL Injection?

在 SQL LIKE 語句中使用參數

建立搜尋函數時,必須使用參數來防範 SQL 注入威脅。但是,在 LIKE 語句中使用參數可能會帶來挑戰,如以下查詢所示:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
登入後複製

此查詢容易受到 SQL 注入,因為參數未正確清理。若要修正此問題,必須使用下列值正確定義和指派參數:

Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

cmd.Parameters.Add("@query", "%" +searchString +"%")
登入後複製

在此範例中,參數 @query 是使用 searchString 的值定義的。這可確保使用者的輸入 searchString 得到正確的清理,並防止查詢受到 SQL 注入。

此外,值得注意的是,直接在SQL Server 中執行時查詢會傳回結果:

SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE '%max%')
登入後複製

這是因為查詢是在不帶參數的情況下執行的,LIKE語句直接將字串%max% 與body 和title 欄位的內容進行比較。但是,當使用參數執行時,LIKE 語句會將參數值 @query 與已正確清理的列內容進行比較,從而導致不傳回任何符合項。

以上是如何安全地在SQL LIKE語句中使用參數來防止SQL注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板