C#.NET防止SQL注入式攻击

摘要:
=String.Empty))14{15stringstr_Regex=@“\b\b”;1617RegexRegex=newRegex;18//strings=Regex.Match.Value;19if20returnfalse;2122}23}24捕获25{26返回false;27}28返回true;29}303132/**///33///处理用户提交的请求,验证sql注入攻击,然后运行34////System。配置配置设置。AppSettings[“ErrorPage”]。当页面安装时,ToString();为用户自定义错误页面提示地址,35///向Web添加错误页面时。配置文件,36///37////38///39publicvoid ProcessRequest()40{41try42{43string getkeys=“”;44string sqlErrorPage=System.Configuration.ConfigurationSettings.AppSettings[“ErrorPage”].ToString();45if(System.Web.HttpContext.Current.Request.QueryString!Errmsg=“+getkeys+”怀疑受到SQL攻击!74}75}76#endregion777879801转换sql代码#region转换sql代码82/*///83////提取固定长度的字符84///85//86//88/publicstringCheckStringLength89{90if(inputString!

  1C#.NET防止SQL注入式攻击第1张C#.NET防止SQL注入式攻击第2张防止sql注入式攻击(可用于UI层控制)#region 防止sql注入式攻击(可用于UI层控制)
  2C#.NET防止SQL注入式攻击第3张
  3C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张/**//// 
  4C#.NET防止SQL注入式攻击第3张/// 判断字符串中是否有SQL攻击代码
  5C#.NET防止SQL注入式攻击第3张/// 
  6C#.NET防止SQL注入式攻击第3张/// 传入用户提交数据
  7C#.NET防止SQL注入式攻击第9张/// true-安全;false-有注入攻击现有;

  8C#.NET防止SQL注入式攻击第3张public bool ProcessSqlStr(string inputString)
  9C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张C#.NET防止SQL注入式攻击第13张{
 10C#.NET防止SQL注入式攻击第3张    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net +user|net +localgroup +administrators";
 11C#.NET防止SQL注入式攻击第3张    try
 12C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
 13C#.NET防止SQL注入式攻击第3张        if ((inputString != null&& (inputString != String.Empty))
 14C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张        C#.NET防止SQL注入式攻击第13张{
 15C#.NET防止SQL注入式攻击第3张            string str_Regex = @"\b(" + SqlStr + @")\b";
 16C#.NET防止SQL注入式攻击第3张
 17C#.NET防止SQL注入式攻击第3张            Regex Regex = new Regex(str_Regex, RegexOptions.IgnoreCase);
 18C#.NET防止SQL注入式攻击第3张            //string s = Regex.Match(inputString).Value; 
 19C#.NET防止SQL注入式攻击第3张            if (true == Regex.IsMatch(inputString))
 20C#.NET防止SQL注入式攻击第3张                return false;
 21C#.NET防止SQL注入式攻击第3张
 22C#.NET防止SQL注入式攻击第9张        }

 23C#.NET防止SQL注入式攻击第9张    }

 24C#.NET防止SQL注入式攻击第3张    catch
 25C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
 26C#.NET防止SQL注入式攻击第3张        return false;
 27C#.NET防止SQL注入式攻击第9张    }

 28C#.NET防止SQL注入式攻击第3张    return true;
 29C#.NET防止SQL注入式攻击第9张}

 30C#.NET防止SQL注入式攻击第3张
 31C#.NET防止SQL注入式攻击第3张
 32C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张/**//// 
 33C#.NET防止SQL注入式攻击第3张/// 处理用户提交的请求,校验sql注入式攻击,在页面装置时候运行
 34C#.NET防止SQL注入式攻击第3张/// System.Configuration.ConfigurationSettings.AppSettings["ErrorPage"].ToString(); 为用户自定义错误页面提示地址,
 35C#.NET防止SQL注入式攻击第3张/// 在Web.Config文件时里面添加一个 ErrorPage 即可
 36C#.NET防止SQL注入式攻击第3张/// 
 37C#.NET防止SQL注入式攻击第3张///     
 38C#.NET防止SQL注入式攻击第9张/// 

 39C#.NET防止SQL注入式攻击第3张public void ProcessRequest()
 40C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张C#.NET防止SQL注入式攻击第13张{
 41C#.NET防止SQL注入式攻击第3张    try
 42C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
 43C#.NET防止SQL注入式攻击第3张        string getkeys = "";
 44C#.NET防止SQL注入式攻击第3张        string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["ErrorPage"].ToString();
 45C#.NET防止SQL注入式攻击第3张        if (System.Web.HttpContext.Current.Request.QueryString != null)
 46C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张        C#.NET防止SQL注入式攻击第13张{
 47C#.NET防止SQL注入式攻击第3张
 48C#.NET防止SQL注入式攻击第3张            for (int i = 0; i < System.Web.HttpContext.Current.Request.QueryString.Count; i++)
 49C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张            C#.NET防止SQL注入式攻击第13张{
 50C#.NET防止SQL注入式攻击第3张                getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];
 51C#.NET防止SQL注入式攻击第3张                if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))
 52C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张                C#.NET防止SQL注入式攻击第13张{
 53C#.NET防止SQL注入式攻击第3张                    System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + "?errmsg=" + getkeys + "有SQL攻击嫌疑!");
 54C#.NET防止SQL注入式攻击第3张                    System.Web.HttpContext.Current.Response.End();
 55C#.NET防止SQL注入式攻击第9张                }

 56C#.NET防止SQL注入式攻击第9张            }

 57C#.NET防止SQL注入式攻击第9张        }

 58C#.NET防止SQL注入式攻击第3张        if (System.Web.HttpContext.Current.Request.Form != null)
 59C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张        C#.NET防止SQL注入式攻击第13张{
 60C#.NET防止SQL注入式攻击第3张            for (int i = 0; i < System.Web.HttpContext.Current.Request.Form.Count; i++)
 61C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张            C#.NET防止SQL注入式攻击第13张{
 62C#.NET防止SQL注入式攻击第3张                getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i];
 63C#.NET防止SQL注入式攻击第3张                if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
 64C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张                C#.NET防止SQL注入式攻击第13张{
 65C#.NET防止SQL注入式攻击第3张                    System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + "?errmsg=" + getkeys + "有SQL攻击嫌疑!");
 66C#.NET防止SQL注入式攻击第3张                    System.Web.HttpContext.Current.Response.End();
 67C#.NET防止SQL注入式攻击第9张                }

 68C#.NET防止SQL注入式攻击第9张            }

 69C#.NET防止SQL注入式攻击第9张        }

 70C#.NET防止SQL注入式攻击第9张    }

 71C#.NET防止SQL注入式攻击第3张    catch
 72C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
 73C#.NET防止SQL注入式攻击第3张        // 错误处理: 处理用户提交信息!
 74C#.NET防止SQL注入式攻击第9张    }

 75C#.NET防止SQL注入式攻击第9张}

 76C#.NET防止SQL注入式攻击第105张#endregion

 77C#.NET防止SQL注入式攻击第106张
 78C#.NET防止SQL注入式攻击第106张
 79C#.NET防止SQL注入式攻击第106张
 80C#.NET防止SQL注入式攻击第106张
 81C#.NET防止SQL注入式攻击第1张C#.NET防止SQL注入式攻击第2张转换sql代码(也防止sql注入式攻击,可以用于业务逻辑层,但要求UI层输入数据时候进行解码)#region 转换sql代码(也防止sql注入式攻击,可以用于业务逻辑层,但要求UI层输入数据时候进行解码)
 82C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张/**//// 
 83C#.NET防止SQL注入式攻击第3张/// 提取字符固定长度
 84C#.NET防止SQL注入式攻击第3张/// 
 85C#.NET防止SQL注入式攻击第3张/// 
 86C#.NET防止SQL注入式攻击第3张/// 
 87C#.NET防止SQL注入式攻击第9张/// 

 88C#.NET防止SQL注入式攻击第3张public string CheckStringLength(string inputString, Int32 maxLength)
 89C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张C#.NET防止SQL注入式攻击第13张{
 90C#.NET防止SQL注入式攻击第3张    if ((inputString != null&& (inputString != String.Empty))
 91C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
 92C#.NET防止SQL注入式攻击第3张        inputString = inputString.Trim();
 93C#.NET防止SQL注入式攻击第3张
 94C#.NET防止SQL注入式攻击第3张        if (inputString.Length > maxLength)
 95C#.NET防止SQL注入式攻击第3张            inputString = inputString.Substring(0, maxLength);
 96C#.NET防止SQL注入式攻击第9张    }

 97C#.NET防止SQL注入式攻击第3张    return inputString;
 98C#.NET防止SQL注入式攻击第9张}

 99C#.NET防止SQL注入式攻击第3张
100C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张/**//// 
101C#.NET防止SQL注入式攻击第3张/// 将输入字符串中的sql敏感字,替换成"[敏感字]",要求输出时,替换回来
102C#.NET防止SQL注入式攻击第3张/// 
103C#.NET防止SQL注入式攻击第3张/// 
104C#.NET防止SQL注入式攻击第9张/// 

105C#.NET防止SQL注入式攻击第3张public string MyEncodeInputString(string inputString)
106C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张C#.NET防止SQL注入式攻击第13张{
107C#.NET防止SQL注入式攻击第3张    //要替换的敏感字
108C#.NET防止SQL注入式攻击第3张    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net +user|net +localgroup +administrators";
109C#.NET防止SQL注入式攻击第3张    try
110C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
111C#.NET防止SQL注入式攻击第3张        if ((inputString != null&& (inputString != String.Empty))
112C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张        C#.NET防止SQL注入式攻击第13张{
113C#.NET防止SQL注入式攻击第3张            string str_Regex = @"\b(" + SqlStr + @")\b";
114C#.NET防止SQL注入式攻击第3张
115C#.NET防止SQL注入式攻击第3张            Regex Regex = new Regex(str_Regex, RegexOptions.IgnoreCase);
116C#.NET防止SQL注入式攻击第3张            //string s = Regex.Match(inputString).Value; 
117C#.NET防止SQL注入式攻击第3张            MatchCollection matches = Regex.Matches(inputString);
118C#.NET防止SQL注入式攻击第3张            for (int i = 0; i < matches.Count; i++)
119C#.NET防止SQL注入式攻击第3张                inputString = inputString.Replace(matches[i].Value, "[" + matches[i].Value + "]");
120C#.NET防止SQL注入式攻击第3张
121C#.NET防止SQL注入式攻击第9张        }

122C#.NET防止SQL注入式攻击第9张    }

123C#.NET防止SQL注入式攻击第3张    catch
124C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
125C#.NET防止SQL注入式攻击第3张        return "";
126C#.NET防止SQL注入式攻击第9张    }

127C#.NET防止SQL注入式攻击第3张    return inputString;
128C#.NET防止SQL注入式攻击第3张
129C#.NET防止SQL注入式攻击第9张}

130C#.NET防止SQL注入式攻击第3张
131C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张/**//// 
132C#.NET防止SQL注入式攻击第3张/// 将已经替换成的"[敏感字]",转换回来为"敏感字"
133C#.NET防止SQL注入式攻击第3张/// 
134C#.NET防止SQL注入式攻击第3张/// 
135C#.NET防止SQL注入式攻击第9张/// 

136C#.NET防止SQL注入式攻击第3张public string MyDecodeOutputString(string outputstring)
137C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张C#.NET防止SQL注入式攻击第13张{
138C#.NET防止SQL注入式攻击第3张    //要替换的敏感字
139C#.NET防止SQL注入式攻击第3张    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net +user|net +localgroup +administrators";
140C#.NET防止SQL注入式攻击第3张    try
141C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
142C#.NET防止SQL注入式攻击第3张        if ((outputstring != null&& (outputstring != String.Empty))
143C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张        C#.NET防止SQL注入式攻击第13张{
144C#.NET防止SQL注入式攻击第3张            string str_Regex = @"\[\b(" + SqlStr + @")\b\]";
145C#.NET防止SQL注入式攻击第3张            Regex Regex = new Regex(str_Regex, RegexOptions.IgnoreCase);
146C#.NET防止SQL注入式攻击第3张            MatchCollection matches = Regex.Matches(outputstring);
147C#.NET防止SQL注入式攻击第3张            for (int i = 0; i < matches.Count; i++)
148C#.NET防止SQL注入式攻击第3张                outputstring = outputstring.Replace(matches[i].Value, matches[i].Value.Substring(1, matches[i].Value.Length - 2));
149C#.NET防止SQL注入式攻击第3张
150C#.NET防止SQL注入式攻击第9张        }

151C#.NET防止SQL注入式攻击第9张    }

152C#.NET防止SQL注入式攻击第3张    catch
153C#.NET防止SQL注入式攻击第4张C#.NET防止SQL注入式攻击第5张    C#.NET防止SQL注入式攻击第13张{
154C#.NET防止SQL注入式攻击第3张        return "";
155C#.NET防止SQL注入式攻击第9张    }

156C#.NET防止SQL注入式攻击第3张    return outputstring;
157C#.NET防止SQL注入式攻击第9张}

158C#.NET防止SQL注入式攻击第105张#endregion

我们的解决方式是:
1、首先在UI录入时,要控制数据的类型和长度、防止SQL注入式攻击,系统提供检测注入式攻击的函数,一旦检测出注入式攻击,该数据即不能提交;
2、业务逻辑层控制,通过在方法内部将SQL关键字用一定的方法屏蔽掉,然后检查数据长度,保证提交SQL时,不会有SQL数据库注入式攻击代码;但是这样处理后,要求UI输出时将屏蔽的字符还原。因此系统提供屏蔽字符 的函数和还原字符的函数。
3、在数据访问层,绝大多数采用存储过程访问数据,调用时以存储过程参数的方式访问,也会很好的防止注入式攻击。

免责声明:文章转载自《C#.NET防止SQL注入式攻击》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SILK编码语音转WAV格式Python源码剖析之编译Python下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MyBatis映射文件(编写SQL语句;可有可无(无的时候,使用注解编程))

 一、映射文件  1.简单的增删改(需要commit)---查 MyBatis允许增删改直接定义以下类型返回值   Integer、Long、Boolean、void 我们需要手动提交数据。   sqlSessionFactory.openSession();===>需要手动提交   sqlSessionFactory.openSession(tr...

mybatis是如何防止sql注入的

今天突然在想大家一直说的sql注入是很危险的情况,那么mybatis是如何防止sql注入的呢? 带着这个疑问开始了搜索,最后探究如下: 原来mybatis在写sql的时候使用了#{},起到了预编译的效果,而这个预编译示例如下: select name, age from table where school=#{school} 转变为如下 select n...

DVWA(三):SQL injection 全等级SQL注入

(本文不定期更新) 一、所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二、SQL注入产生的原因:   程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患 用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作。 三、关于SQL注入需要注意...

[原创]Spring JdbcTemplate 使用总结与经验分享

引言 近期开发的几个项目,均是基于Spring boot框架的web后端项目,使用JdbcTemplate执行数据库操作,实际开发过程中,掌握了一些有效的开发经验,踩过一些坑,在此做个记录及总结,与各位读者分享。 欢迎留言与我交流。 正确使用JdbcTemplate执行数据库操作 1、Bean声明 新增类型DatabaseConfiguration,添加注...

java框架之mybatis

一、简介 1、基本概念 mybatis 是一个半自动轻量级的一个 orm 框架 将 java 与 sql 分离,解决了 jdbc 的硬编码问题; sql 由开发人员控制,更加方便 sql 的修改调优; 2、入门程序 2.1 原始方法:通过 sqlsession 来操作数据库 建一个全局配置文件(mybatis-config.xml),配置数据源等运行...

谈jdbcTemplate与mybatis

为什么会产生 Hibernate Mybatis 这类的dao层框架 传统的jdbc 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的数据库时,由于关系型数据库的设计思想是数学思维,在持久化时,必须要对象拆分各个属性值,才可存入数据库;传统的jdbc 持久化时 对象持久化时 ,取出对象的一个...