在 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中文網其他相關文章!