.NET防SQL注入中篇

   上篇说了在数据库设计时应该注意的问题,下面谈谈怎样在编写代码时采取的防护措施。 
   1.防SQL注入的代码:
           我采用了Regex类,此类是用来表示不可变的正则表达式,不懂的朋友可以看看MSDN英文版的介绍,另外不懂正则表达式的也看一下我的blog的正则表达式入门了.
          下面是一端防SQL注入的代码:
Regex r = new Regex(@"/w*(select|'|declare|@@|--|update|drop|create|backup|union|exec|eval|xp_|sp_|truncate|load_file|.cif|cmd|command|dir|and|delete|insert|count|drop|set|grant|deny|revoke|readtext|kill|checkpoint)+/w*",RegexOptions.IgnoreCase);
        if (r.IsMatch(Request.QuertString["UserID"].toString())) //接受上一个web form传来的参数,用Regex的IsMatch() Method finds a match in the input string。
            Response.Write("滚开,菜鸟!");
    .........................................//或者放入其他出错代码

   2.用RegularExpressionValidator 控件对web form 输入控件(如用户密码框,用户名称框等)进行验证.
     用户登录时要特别对用户名称控件和用户密码控件进行验证,例如:
     验证用户名称控件,构建正则表式为[a-zA-Z]{8,20} 这样就过滤掉了单引号,注释符之类的不安全字符。
     用户密码控件构建正则表式为/w*[!#$^*]/w*  这样密码必须包含!#$^*字符,并且过滤掉了单引号,注释符之类的不安全字符。
    3.用防火墙
    我推荐用VIF防火墙,她是一个专门保护IIS的防火墙,不同于Rising firewall,她不但对SQL注入有很好的防护作用,而且有防CC攻击,防盗链,隐藏IP地址等功能.
可以去迅雷下一个.
     4.编写代码时不要这样写:
       (1)string name,pwd;
name=Request.QueryString["name"].toString();
pwd=Request.QueryString["pwd"].toString();

if name="" or pwd="" then
response.redirect "login.asp"
end if
……
'关于身份验证
sql="select * from user where name='"+name+"' and pwd='"+pwd+"';


(2)  在web form之间传递参数时也不要这样写,如:
  string userID=Request.QueryString["userid"].toString();
 sql="select * from user where userid="+userID;

可以建立一个用户类,赋值给使用类的属性.




    

   





      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值