为了避免SQL Server中的SQL注入攻击,应该从字符串中转义的所有字符是什么?

Mih*_*kov 2 c# sql sql-server sql-server-2008 sql-server-2012

我正在编写一个小帮助程序库,它正在构建一些SQL并针对SQL Server数据库执行它.

我知道最好的方法是使用参数化查询而不是连接字符串,但这不是一个选项,因为我需要以一种简单的人类可读方式记录对数据库执行的所有查询,以便在查看时管理员可以自由查看用于搜索的实际值是什么where.

在将该字符串放入查询并执行之前,我必须转义的所有字符是什么?

我知道单引号'是必须的但是我必须关心别的吗?

以下是一些示例代码:

var condition = new Condition();
var table = new PersonTable();
condition.Add(table.Name.IsEqualTo("John's"));
Run Code Online (Sandbox Code Playgroud)

这将转换为

WHERE [dbo].[Person].[Name] = N'John''s'
Run Code Online (Sandbox Code Playgroud)

你怎么攻击,如果我只接受stringIsEqualTo方法和逃逸单'''

据我所知,SQL Server仅接受'字符串分隔符.

pod*_*ska 9

任何已知字符集中的每个字符.

现在使用经过验证和接受的技术.

  • "小鲍比表"同意!http://bobby-tables.com/img/xkcd.png (2认同)