Q: 如何保护我的SQL Server数据库免受SQL注入攻击?
A:
SQL注入可能是最常见的攻击面向Internet的SQL Server数据库的方法。即使你对网络和
防火墙进行了防护,只要应用程序存在漏洞,那么依然存在受攻击的可能。微软已经注
意到最近针对使用ASP和
ASP.NET网站的攻击数量呈上升趋势。这不仅会导致数据的失窃
和丢失,在近期的很多案例中数据库中还被攻击者加入恶意javascript代码,这导致访
问网站的客户电脑也会因此感染病毒。
防护针对您数据库的SQL注入攻击有如下的几种方法:
1. 使用双引号
使用双引号或其他符号替换您的用户的输入值。这种简单的预防措施能较为有效的防护
相当多的SQL注入攻击。单引号经常被用于结束SQL表达式,使输入的内容获得不必要的
权限。
代码如下:
string strSanitizedInput = strInput.Replace("'", "''");
注意:请记住即使你已经替换了单引号,攻击者也有可能绕过这个防护措施。
2. 避免动态SQL
动态SQL是动态查询的很好的工具,但这也会暴露脆弱点。很多情况下可以使用其他SQL
语句或存储过程来代替动态SQL。当然,如果您在存储过程中依然通过用户输入来建立动
态SQL查询,那么只靠替换还是不安全的。