Ale*_*rey 2 sql sql-server code-injection
以下示例(SQL Server 2008 - 可能更多).您必须想象一下@query其源是用户输入的参数:
DECLARE @query varchar(100)
SET @query = 'less than 1% fat'
CREATE TABLE X ([A] VARCHAR(100))
INSERT X VALUES ('less than 1% fat')
INSERT X VALUES ('less than 1% of doctors recommend this - it''s full of fat!')
SELECT * FROM X WHERE A LIKE '%' + @query + '%'
DROP TABLE X
Run Code Online (Sandbox Code Playgroud)
查询说明了'less than 1% fat',但实际上我们获得了比我们想要的更多:
less than 1% fat
less than 1% of doctors recommend this - it's full of fat!
Run Code Online (Sandbox Code Playgroud)
为了获得所需的行为,我@query改为'less than 1[%] fat'- 然后只返回第一个结果.
有没有一种标准的方法来为使用LIKEs的子句准备字符串,还是我必须自己滚动?
SQL Server允许您指定转义字符,然后您可以在使用它之前转义查询字符串.
我链接的MSDN页面中的示例:
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';
Run Code Online (Sandbox Code Playgroud)