ASP.NET 2.0防止SQL注入攻击

 1.屏蔽所有错误页,使用统一的出错页面。

攻击者开始都根据输入非法的SQL语句,根据页面返回的错误信息来判断后台数据库类型,系统表名等等。因此,我们应该屏蔽掉所有异常的信息。在ASP.NET2.0中,我们可以添加Global.asax文件。在  void Application_Error(object sender, EventArgs e) 
方法中添加一下代码:

Server.ClearError();

然而这样会对我们开发造成一定的困扰。因为屏蔽掉所有的异常信息,程序员要定位错误位置将非常困难。因此我们的想法是:在程序开始调试的时候,页面将显示默认的错误信息,在网站发布的时候,页面降屏蔽所有出错信息。我们可以在Web.config中增加一个配置节。 

<appSettings>
    <add key="ReleaseVersion" value=""/>
</appSettings>
把void Application_Error(object sender, EventArgs e) 
改成

if (ConfigurationManager.AppSettings["ReleaseVersion"] == "True")

{
     Server.ClearError();
}

这样只要在发布之前把value设置为"True"就可以了。

2.在后台检查所有SQL的参数。

   2.1 '|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare 不能包含以上关键字。

   2.2 对于长度进行判断,不能超过一定的长度。

   2.3 使用SqlCommand调用存储过程。参数使用SqlParameter,它会自动把value中的特殊字符转义。

3.数据库后台敏感数据必须加密,不能存明码。比如账号密码信息。

4.对于数据库连接使用的用户不能权限太大。

如果你的sql数据库连接使用的是sa权限的用户,那么使用sql注入就有可能获取操作系统的administrators组的权限,也就是服务器的全部管理权限。 因为有所有系统的存储过程可是直接执行很多系统操作,比如执行shell脚本,读取注册表等等。

master.dbo.xp_regread 读注册表

xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值