在SQL Server中禁用多个语句?

dai*_*isy 3 sql-server

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

那么,我可以禁用该功能,还是需要修改连接字符串才能使其正常工作?

Seb*_*ine 7

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

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

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

SELECT * FROM dbo.users WHERE user_name = '?' and password = '?';
Run Code Online (Sandbox Code Playgroud)

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

admin';--
Run Code Online (Sandbox Code Playgroud)

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

在此攻击中,批处理仍然只包含一个语句,因此您的"技巧"不会阻止它.

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

在SQL中使用预准备语句或存储过程,并使用API​​功能替换参数值.

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