我正在运行一个由 ASPX 和 SQL Server 支持的 Web 应用程序,现在我想禁用多个语句执行,例如select 1,2,3; select 1,2,3
那么,我可以禁用该功能,还是需要修改连接字符串才能使其工作?
我正在运行一个由 ASPX 和 SQL Server 支持的 Web 应用程序,现在我想禁用多个语句执行,例如select 1,2,3; select 1,2,3
那么,我可以禁用该功能,还是需要修改连接字符串才能使其工作?
Microsoft SQL Server 没有限制每批语句数的选项。
虽然一些 SQL 注入攻击依赖于向批处理中注入额外的语句,但其他攻击只是试图改变手头的语句以使其受益。通过实施这个想法可以防止第一种类型。但是,第二种不能。
SQL 注入的标准示例是登录查询:
SELECT * FROM dbo.users WHERE user_name = '?' and password = '?';
如果您使用手动参数替换和攻击者类型
admin';--
作为用户名和任何密码,如果真正的管理员输入了正确的密码,应用程序会从数据库中获得相同的响应。
在这次攻击中,批处理仍然只包含一个语句,所以你的“技巧”不会阻止它。
一般来说,最好首先防止注射。在使用它来构建任何类型的动态语句(不仅是 SQL 语句)之前,请始终验证所有用户输入。
在 SQL 中使用准备好的语句或存储过程,并使用 API 功能替换参数值。
反注入模式的一个很好的起点是这篇技术网文章:http ://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx