在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 什么是SQL注入 2. SQL注入的种类 3,如何进行的注入 下面我们看一个典型例子
1SqlCommand cmd = new SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ UserName + "' AND UserPassword = '" + PassWord + "'", conn);
1SELECT * FROM PE_USERS WHERE UserName=’admin’ OR 1=1—‘ AND UserPassword=’’
2
这就造成了SQL注入,条件永远为真,也就不用密码也能登陆成功。
4.如何防止SQL注入 1.过滤或转换可疑字符串 通过编写过滤或者转换危险字符串的函数,然后在GLOBAL.ASAX或者重写上下文实例来实现防止SQL注入 这里有个例子
1public static bool SqlFilter2(string InText)
2 { 3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join"; 4 if(InText==null) 5 return false; 6 foreach(string i in word.Split('|')) 7 { 8 if((InText.ToLower().IndexOf(i+" ")>-1)||(InText.ToLower().IndexOf(" "+i)>-1)) 9 { 10 return true; 11 } 12 } 13 return false; 14 } 二,Global.asax
1protected void Application_BeginRequest(Object sender, EventArgs e)
2 { 3 //遍历Post参数,隐藏域除外 4 foreach(string i in this.Request.Form) 5 { 6 if(i=="__VIEWSTATE")continue; 7 this.goErr(this.Request.Form[i].ToString()); 8 } 9 //遍历Get参数。 10 foreach(string i in this.Request.QueryString) 11 { 12 this.goErr(this.Request.QueryString[i].ToString()); 13 } 14 }
1private void goErr(string tm)
2 { 3 if(WLCW.Extend.CValidity.SqlFilter2(tm)) 4 this.Response.end() 5 }
优点:该种方面是大多数初级程序员用来防止SQL注入,看起来效果还不错,能防止大多数情况下的注入。 缺点:1.会过滤一些本来不是用来进行注入的字符,造成意想不到的问题。比如,一个论坛的会员名字里如果含有和所过滤字符相同的字符的话,会造成一些列意想不到的问题和麻烦。 2.每次都需要进行过滤或者转换,降低程序效率 2.使用存储过程进行参数化查询 SQL注入主要目的是想通过提交恶意的SQL代码,来达到在数据库里执行恶意命令的目的。所以只要在执行SQL命令前做处理,就可以有效防止SQL注入。进行参数化查询可以达到有效防止SQL注入的目的。 实例
1const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
2Parameters parms = new Parameters("@UserName", DbType.String, userName); 上面有一个参数@UserName, 使用Prarmeter对象,通过它把参数添加到Command对象上,
1Exec sp_executesql N ‘select * from [pe_users] where username=@username ‘,N
2‘@username nvarchar(20) ‘,@username=N ‘name’ SQL Server 把@username 替换成字符串”name”,然后再执行查询.
1'union select @@version,null,null—
生成的SQL语句如下所示:
1Exec sp_executesql N ‘select * from [pe_users] where username=@username ‘,N
可以看到ADO.NET转义了输入。2‘@username nvarchar(20) ‘,@username=N ‘’’ union select @@version,null,null--’
1public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
DbTye或SqlDbType可以是多种数据类型。 3.白名单 描述: |
请发表评论