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

问题描述 投票:0回答:3

我正在从一堆文本文件生成一些 sql 插入语句。

这些文本文件通常是用户输入的数据。我想清理这些数据,这样就不会破坏插入语句。

例如,某些输入数据中,人们使用了“Don’t”一词。 don't中的“'”会导致sql语句认为字符串已经结束,从而导致错误。

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

.net sql sanitization
3个回答
39
投票

只有一个字符需要转义:ansi 0x27,又名单引号:

safeString = unsafeString.Replace("'","''");

30
投票

不要对琴弦进行消毒。请改用参数化查询,因为它们会处理所有清理工作。

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


0
投票

我认为两者的结合通常是一个很好的做法。 在后面的代码上(假设文本框只接受数字:

    strSQL="exec GetMember" & SanitizeInput(ID)
    *do your db call*

    Public Function SanitizeInput(byval InputString as String)
      Dim OutputString=replace(InputString,"'","''")
      OutputString=replace(OutputString,"<script>","")
      OutputString=replace(OutputString,"DROP","")
      *... and more rules...*
      Return OutputString
    End Function

在您的 SQl 存储过程上:

CREATE PROCEDURE GetMember
@ID int
AS
BEGIN
SET NOCOUNT ON;
Select {whatevercolumns} from Members where ID=@ID
END
GO
© www.soinside.com 2019 - 2024. All rights reserved.