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