首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中,是否可以在不使用另一个单引号的情况下转义单引号?

在SQL Server中,是否可以在不使用另一个单引号的情况下转义单引号?
EN

Stack Overflow用户
提问于 2012-09-26 23:09:38
回答 1查看 3.3K关注 0票数 0

我们有一些连接到MS SQL server数据库的经典ASP页。为了防止SQL注入,我们只需将所有单引号替换为双单引号。这似乎就是这里规定的方法:http://www.4guysfromrolla.com/webtech/061902-1.shtml

这对我来说还是很危险。有没有办法用其他字符转义单引号,从而可能打开SQL注入?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-26 23:17:48

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

代码语言:javascript
复制
Set objCommand = CreateObject("ADODB.Command")
With objCommand
.CommandText = "INSERT dbo.Table(Column) values (?)"
.CommandType = adCmdText
.ActiveConnection = "Connection string" or existing open connection
.Parameters.Append .CreateParameter("@p1", adVarChar, adParamInput, 50, "O'Brien")
.Execute
Set .ActiveConnection = Nothing
End With

您当前依赖的方法不安全。假设您的ASP页面中嵌入了以下动态SQL:

代码语言:javascript
复制
sql = "SELECT Name FROM dbo.Students WHERE Id = " & Request("StudentId") 

现在假设某人决定尝试将以下内容添加到查询字符串(或表单,或您拥有的内容)中:

代码语言:javascript
复制
1; DROP TABLE dbo.Students;

用单引号替换此字符串如何帮助您避免SQL注入?在您知道的情况下,您可能会这样做:

代码语言:javascript
复制
sql = "SELECT Name FROM dbo.Students WHERE Id = " & CLng(Request("StudentId"))

因此,现在您必须重新编写此代码,并找出可能导致注入的数据类型不是字符串的情况。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12604849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档