2013-08-12 89 views
2

我运行的ASPX和SQL Server支持的Web应用程序,现在我想禁用多个语句的执行,如select 1,2,3; select 1,2,3在SQL Server中禁用多个语句?

所以,我可以禁用该功能,或是否需要修改连接字符串,使这行得通?

+4

你不能。除此之外,你为什么要这样做? –

+2

您是否试图保护自己免受SQL注入? –

+0

@ MarkStorey-Smith我发现MySQL可以手动禁用该功能,然后我想到了MSSQL。请检查我的回复Sebastian – daisy

回答

7

Microsoft SQL Server没有限制每批语句数量的选项。

虽然有些SQL注入攻击依赖于在批处理中注入额外语句,但其他SQL语句只是试图将语句随时更改为自己的优势。通过实施这个想法可以防止第一种类型。但是,第二种类型不能。

SQL注入的标准的例子是登录查询:

SELECT * FROM dbo.users WHERE user_name = '?' and password = '?'; 

如果使用手动参数替代和攻击类型

admin';-- 

用户名和任何密码,应用程序获取如果真正的管理员输入了正确的密码,它将从数据库获得相同的响应。

在这次攻击中,批处理仍然只包含一个语句,所以你的“技巧”不会阻止它。

总的来说,最好是首先防止注射。在使用它构建任何类型的动态语句(不仅仅是SQL语句)之前,请始终验证所有用户输入。

在SQL中使用预准备语句或存储过程并使用API​​函数替换参数值。

一个很好的起点为防注入的模式是这样的TechNet文章:http://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx