上篇说了在数据库设计时应该注意的问题,下面谈谈怎样在编写代码时采取的防护措施。
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;
可以建立一个用户类,赋值给使用类的属性.
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;
可以建立一个用户类,赋值给使用类的属性.