注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 [业内传闻]今天,7月25日..
 帮助

ASP.NET基础教程-如何防范SQL注入式攻击


2008-01-06 10:55:12
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chenxing.blog.51cto.com/240526/58190
SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入或页面请示的查询字符串,欺骗服务器执行恶意的SQL命令。
在某些表单中,用户输入的内容可能直接用来构成SQL命令,如果不加防范的话,很容易受到SQL注入式攻击。
下面是一个常见的SQL注入式攻击过程示例:
1、ASP.NET登录页面,有两个文本输入框TXT_USERID、TXT_PASSWORD用来输入用户名和密码,一个登录按扭进行验
证登录。
2、单击“登录”按扭后根据文本框构造动态SQL命令,并根据是否返回记录为登录成功的标志。代码如下:
SqlConnection con=new SqlConnection(@ConfigurationSettings.AppSettings["server"]);
jmpassword Password=new jmpassword();
string password=Password.EncryptPassword(txtpassword.Text.ToString(),"SHA1")
+Password.EncryptPassword(txtpassword.Text.ToString(),"MD5");
SqlCommand comm=new SqlCommand("select count(*) from verify where id='"+txtuserid.Text+"' and password='"+password+"'",con);
con.Open();
int jl=(Int32)comm.ExecuteScalar();
con.Close();
if(jl>0)
{
   代码段
}
else
{
   代码段
}
3、攻击者在用户名输入框中输入”LH‘ or ‘1’=‘1“,密码框为空,单击登录
4、经过SQL注入攻击后生成的SQL命令变成了如下代码:
    select count(*) from verify where id=‘LH‘ or ‘1’=1 and password=‘’
   这样,SQL语句的逻辑含义改变了,服务器执行后已经不能真正验证用户身份,系统就错误地授权给攻击者
   还可以出现危害更大的代码,如文本框输入”LH‘;DROP TABLE VERIFY;--“,SQL语句将生成为:
   select count(*) from verify where id=‘LH‘; DROP TABLE VERIFY;-- and password=‘’
 
SQL注入攻击防范措施
1、将SQL中使用的一些特殊符号,如“‘”,“—”,“/*”,“%”等,用Replace()方法过滤掉,缺少了这些符号,攻击代码也就变得没有意义
2、限制文本框输入字符的长度
3、检查用户输入的合法性,确信输入的内容只包含合法的数据
4、充分利用正则表达式来检验数据的合法性。数据检查应当在客户端和服务器端都执行,之所以要执行服务器端难,是为了弥补客户
端验证机制脆弱的安全性
5、使用带参数的SQL语句形式
     参数提供了一种有效的方法来组织随SQL语句传递的值,以及向存储过程传递的值。
     通过确保从外部接收的值仅作为值传递,而不是作为SQL语句的一部分传递,可以防止参数受到SQL注入式攻击
6、保持异常信息的私有性。
     攻击者经常利用服务器产生异常时出现的信息,例如故意输入一些可能使程序产生异常的信息。因为异常信息中可能包含关于应用程
     序或数据源的特定信息,所以请不要将系统异常的内容返回用户。如果必须向用户发送信息,则返回包含很少信息的自定义信息。
     例如:“连接失败。请与系统管理员联系。”,并记录特定信息以便于管理员使用。
总结:SQL注入式攻击的漏洞比较常见,造成的问题也比较严重,但只要有针对性地使用上面的方法,对输入信息进行控制,可以防止
          这些攻击。
例:
在页面上利用验证控件RegularExpressionValidator对用户名和密码输入框进行验证
1、设置RegularExpressionValidator控件的ValidationExpression属性值为正则表达
      式:^\w+$,表示验证格式为//由数字、26个英文字母或者下划线组成的字符串
2、将RegularExpressionValidator控件的ControlToValidate属性与要验证的文本框
      控件进行绑定
3、将RegularExpressionValidator控件的ErrorMessage属性设置验证出错时的错误
      提示信息

本文出自 “半瓶香油-好男人时来运转” 博客,请务必保留此出处http://chenxing.blog.51cto.com/240526/58190





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: