Sql server 是否可以在SQL Server中转义一个单引号而不转义另一个单引号?

Sql server 是否可以在SQL Server中转义一个单引号而不转义另一个单引号?,sql-server,asp-classic,Sql Server,Asp Classic,我们有一些连接到MS SQL server数据库的经典ASP页面。为了防止SQL注入,我们只需将所有单引号替换为双单引号。这似乎是这里规定的方法: 这对我来说仍然很危险。是否有任何方法可以用任何其他字符转义单引号,从而可能打开SQL注入 编辑:我们目前有很多旧的代码使用这个单报价来替换双单报价。如果这足以阻止SQL注入,那么我们不会做任何更改。我真正的问题是这个方法是否不安全。使用参数化查询。如果不使用串联将SQL语句组合在一起,那么单引号将为您处理。例如: Set objCommand=Cre

我们有一些连接到MS SQL server数据库的经典ASP页面。为了防止SQL注入,我们只需将所有单引号替换为双单引号。这似乎是这里规定的方法:

这对我来说仍然很危险。是否有任何方法可以用任何其他字符转义单引号,从而可能打开SQL注入


编辑:我们目前有很多旧的代码使用这个单报价来替换双单报价。如果这足以阻止SQL注入,那么我们不会做任何更改。我真正的问题是这个方法是否不安全。

使用参数化查询。如果不使用串联将SQL语句组合在一起,那么单引号将为您处理。例如:

Set objCommand=CreateObjectADODB.Command 带objCommand .CommandText=插入dbo.TableColumn值 .CommandType=adCmdText .ActiveConnection=连接字符串或现有打开的连接 .Parameters.Append。CreateParameter@p1,adVarChar,adParamInput,50,O'Brien 处决 Set.ActiveConnection=Nothing 以 您当前所依赖的方法不安全。假设您的ASP页面中嵌入了以下动态SQL:

sql=从dbo.Students中选择名称,其中Id=&RequestStudentId 现在,让我们假设有人决定尝试将以下内容塞进查询字符串或表单中,或者你做了什么:

1.降表dbo.学生; 用单引号替换此字符串如何帮助您避免SQL注入?在您知道的情况下,您可能会:

sql=从dbo.Students中选择名称,其中Id=&CLngRequestStudentId 因此,现在您必须重新编写这段代码,并找到让您接受注入的数据类型不是字符串的情况


SQL注入并不仅仅是通过利用单引号来定义的。根据您构建SQL字符串的方式,可能还有十几种其他方法来实现这一点。如果你想通过保护这些案件而感到安全,这取决于你。我不会的。我将使用类型安全性正确地参数化所有查询。消除了所有问题,即使前期成本可能很高,你晚上也会睡得更好。

这绝对是我今天写这篇文章的方式。然而,我真的需要知道我们目前的方式是否是出于安全考虑。@Jeffrey-related:可能是重复的