我正在编写一个小帮助程序库,它正在构建一些SQL并针对SQL Server数据库执行它。
我知道最好的方法是使用参数化查询而不是连接字符串,但这不是一个选项,因为我需要以简单的人类可读方式记录对数据库执行的所有查询,以便在管理员查看后,他们可以自由查看用于搜索的实际值在where
子句中的含义。
在将该字符串放入查询并执行之前,我必须转义的所有字符是什么?
我知道单引号'
是必须的,但是我必须关心别的吗?
以下是一些示例代码:
var condition = new Condition();
var table = new PersonTable();
condition.Add(table.Name.IsEqualTo("John's"));
这将转换为
WHERE [dbo].[Person].[Name] = N'John''s'
如果我仅接受string
方法中的IsEqualTo
并使用'
转发单''
,您如何攻击?
据我所知,SQL Server仅接受'
字符串分隔符。
答案 0 :(得分:9)
任何已知字符集中的每个字符。
现在使用经过验证和接受的技术。
答案 1 :(得分:-3)
您应该转义以下字符:
'-' because of '--' (comment)
'=' because of 1=1
'>' or '<' because of 1>0
'%' because of Like '%%'
char(39) because of it is equivalent to '
'"' because it can use in delimiters
'[',']' because it can use in delimiters