如何将字符串转换为安全的SQL字符串?

Dis*_*ive 24 .net sql sanitization

我正在从一堆文本文件中生成一些sql insert语句.

这些文本文件通常是用户输入数据.我想清理这些数据,以便它不会破坏插入语句.

例如,一些输入数据,人们使用了"不要"这个词.不会导致sql语句认为字符串已经结束并因此导致错误.

有没有我可以调用的.NET方法将所有这些字符转换为转义码或安全字符?

And*_*mar 27

你必须逃脱只有一个角色:ansi 0x27,又名单引号:

safeString = unsafeString.Replace("'","''");
Run Code Online (Sandbox Code Playgroud)

  • 这假设OP引用了`insert`语句中的所有值.如果他们正在生成一个类似于`INSERT INTO T1(数字,字符串)值(1,'some string')`的字符串,那么如果他们在第一列中有一些意外的错误数据就无济于事.(例如''1,2); DROP TABLE ......'` (5认同)
  • @MartinSmith然后使用int.TryParse作为第一个参数以确保它是一个干净的整数. (3认同)

Mic*_*tum 22

不要消毒你的琴弦.使用参数化查询,因为它们处理所有清理.

您没有指定您正在使用的数据库,因此我假设它是MS SQL Server.微软在官方ASP.net网站上有一篇关于此的文章.另请参阅MSDN for SqlCommand.ParametersAddWithValue方法.

  • @marc_s:参数化查询只是部分解决方案.它们不能防止SQL注入动态SQL查询,将javascript注入到varchar字段中,将参数注入到html标签中等等.注入时没有"银弹"解决方案. (3认同)
  • +1没有"安全"方式将SQL语句连接在一起 - 使用**参数化查询**(**总是!**)是唯一可行的方法 (2认同)