繁体   English   中英

为了避免SQL Server中的SQL注入攻击,应从字符串中转义所有哪些字符?

[英]What are all the characters that should be escaped from a string to avoid SQL injection attacks in SQL Server?

我正在编写一个小的帮助程序库,该库正在构造一些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'

如果我只接受IsEqualTo方法中的string ,并用''转义单个' ,该如何解决呢?

据我所知,SQL Server仅接受'作为字符串定界符。

任何已知字符集中的每个单个字符。

现在,使用成熟可靠的技术。

您应该转义以下字符:

'-' 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM