ASP.NET基础教程-如何防范SQL注入式攻击
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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 本文出自 51CTO.COM技术博客 |



晨星
博客统计信息
热门文章
最新评论
友情链接
