注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

K8拉登哥哥's Blog

K8搞基大队[K8team] 信息安全 网络安全 0day漏洞 渗透测试 黑客

 
 
 

日志

 
 

C#(ASP.NET)正则表达式 过滤危险字符函数代码 防SQL注入 很全面的SQL关键字过滤  

2011-10-29 18:19:08|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C#(ASP.NET)正则表达式 过滤危险字符函数代码 防SQL注入  很全面的SQL关键字过滤
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Text.RegularExpressions;  
  6.   
  7. namespace BIReportCenter.Utility  
  8. {  
  9.     public class StringHelper  
  10.     {  
  11.         #region String length formatter  
  12.   
  13.         /// <summary>  
  14.         /// 对字符串进行裁剪  
  15.         /// </summary>  
  16.         public static string Trim(string stringTrim, int maxLength)  
  17.         {  
  18.             return Trim(stringTrim, maxLength, "...");  
  19.         }  
  20.   
  21.         /// <summary>  
  22.         /// 对字符串进行裁剪(区分单字节及双字节字符)  
  23.         /// </summary>  
  24.         /// <param name="rawString">需要裁剪的字符串</param>  
  25.         /// <param name="maxLength">裁剪的长度,按双字节计数</param>  
  26.         /// <param name="appendString">如果进行了裁剪需要附加的字符</param>  
  27.         public static string Trim(string rawString, int maxLength, string appendString)  
  28.         {  
  29.             if (string.IsNullOrEmpty(rawString) || rawString.Length <= maxLength)  
  30.             {  
  31.                 return rawString;  
  32.             }  
  33.             else  
  34.             {  
  35.                 int rawStringLength = Encoding.UTF8.GetBytes(rawString).Length;  
  36.                 if (rawStringLength <= maxLength * 2)  
  37.                     return rawString;  
  38.             }  
  39.   
  40.             int appendStringLength = Encoding.UTF8.GetBytes(appendString).Length;  
  41.             StringBuilder checkedStringBuilder = new StringBuilder();  
  42.             int appendedLenth = 0;  
  43.             for (int i = 0; i < rawString.Length; i++)  
  44.             {  
  45.                 char _char = rawString[i];  
  46.                 checkedStringBuilder.Append(_char);  
  47.   
  48.                 appendedLenth += Encoding.Default.GetBytes(new char[] { _char }).Length;  
  49.   
  50.                 if (appendedLenth >= maxLength * 2 - appendStringLength)  
  51.                     break;  
  52.             }  
  53.   
  54.             return checkedStringBuilder.ToString() + appendString;  
  55.         }  
  56.  
  57.  
  58.         #endregion  
  59.  
  60.         #region 特殊字符  
  61.   
  62.         /// <summary>  
  63.         /// 检测是否有Sql危险字符  
  64.         /// </summary>  
  65.         /// <param name="str">要判断字符串</param>  
  66.         /// <returns>判断结果</returns>  
  67.         public static bool IsSafeSqlString(string str)  
  68.         {  
  69.             return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");  
  70.         }  
  71.   
  72.         /// <summary>  
  73.         /// 删除SQL注入特殊字符  
  74.         /// 解然 20070622加入对输入参数sql为Null的判断  
  75.         /// </summary>  
  76.         public static string StripSQLInjection(string sql)  
  77.         {  
  78.             if (!string.IsNullOrEmpty(sql))  
  79.             {  
  80.                 //过滤 ' --  
  81.                 string pattern1 = @"(\%27)|(\')|(\-\-)";  
  82.   
  83.                 //防止执行 ' or  
  84.                 string pattern2 = @"((\%27)|(\'))\s*((\%6F)|o|(\%4F))((\%72)|r|(\%52))";  
  85.   
  86.                 //防止执行sql server 内部存储过程或扩展存储过程  
  87.                 string pattern3 = @"\s+exec(\s|\+)+(s|x)p\w+";  
  88.   
  89.                 sql = Regex.Replace(sql, pattern1, string.Empty, RegexOptions.IgnoreCase);  
  90.                 sql = Regex.Replace(sql, pattern2, string.Empty, RegexOptions.IgnoreCase);  
  91.                 sql = Regex.Replace(sql, pattern3, string.Empty, RegexOptions.IgnoreCase);  
  92.             }  
  93.             return sql;  
  94.         }  
  95.   
  96.         public static string SQLSafe(string Parameter)  
  97.         {  
  98.             Parameter = Parameter.ToLower();  
  99.             Parameter = Parameter.Replace("'""");  
  100.             Parameter = Parameter.Replace(">"">");  
  101.             Parameter = Parameter.Replace("<""<");  
  102.             Parameter = Parameter.Replace("\n""<br>");  
  103.             Parameter = Parameter.Replace("\0""·");  
  104.             return Parameter;  
  105.         }  
  106.   
  107.         /// <summary>  
  108.         /// 清除xml中的不合法字符  
  109.         /// </summary>  
  110.         /// <remarks>  
  111.         /// 无效字符:  
  112.         /// 0x00 - 0x08  
  113.         /// 0x0b - 0x0c  
  114.         /// 0x0e - 0x1f  
  115.         /// </remarks>  
  116.         public static string CleanInvalidCharsForXML(string input)  
  117.         {  
  118.             if (string.IsNullOrEmpty(input))  
  119.                 return input;  
  120.             else  
  121.             {  
  122.                 StringBuilder checkedStringBuilder = new StringBuilder();  
  123.                 Char[] chars = input.ToCharArray();  
  124.                 for (int i = 0; i < chars.Length; i++)  
  125.                 {  
  126.                     int charValue = Convert.ToInt32(chars[i]);  
  127.   
  128.                     if ((charValue >= 0x00 && charValue <= 0x08) || (charValue >= 0x0b && charValue <= 0x0c) || (charValue >= 0x0e && charValue <= 0x1f))  
  129.                         continue;  
  130.                     else  
  131.                         checkedStringBuilder.Append(chars[i]);  
  132.                 }  
  133.   
  134.                 return checkedStringBuilder.ToString();  
  135.   
  136.                 //string result = checkedStringBuilder.ToString();  
  137.                 //result = result.Replace("&#x0;", "");  
  138.                 //return Regex.Replace(result, @"[\?-\\ \ \-\\?-\?]", delegate(Match m) { int code = (int)m.Value.ToCharArray()[0]; return (code > 9 ? "&#" + code.ToString() : "&#0" + code.ToString()) + ";"; });  
  139.             }  
  140.         }  
  141.   
  142.   
  143.         /// <summary>  
  144.         /// 改正sql语句中的转义字符  
  145.         /// </summary>  
  146.         public static string mashSQL(string str)  
  147.         {  
  148.             return (str == null) ? "" : str.Replace("\'""'");  
  149.         }  
  150.   
  151.         /// <summary>  
  152.         /// 替换sql语句中的有问题符号
  153.         /// </summary>  
  154.         public static string ChkSQL(string str)  
  155.         {  
  156.             return (str == null) ? "" : str.Replace("'""''");  
  157.         }   
  158.   
  159.         /// <summary>  
  160.         ///  判断是否有非法字符
  161.         /// </summary>  
  162.         /// <param name="strString"></param>  
  163.         /// <returns>返回TRUE表示有非法字符,返回FALSE表示没有非法字符。</returns>  
  164.         public static bool CheckBadStr(string strString)  
  165.         {  
  166.             bool outValue = false;  
  167.             if (strString != null && strString.Length > 0)  
  168.             {  
  169.                 string[] bidStrlist = new string[9];  
  170.                 bidStrlist[0] = "'";  
  171.                 bidStrlist[1] = ";";  
  172.                 bidStrlist[2] = ":";  
  173.                 bidStrlist[3] = "%";  
  174.                 bidStrlist[4] = "@";  
  175.                 bidStrlist[5] = "&";  
  176.                 bidStrlist[6] = "#";  
  177.                 bidStrlist[7] = "\"";  
  178.                 bidStrlist[8] = "net user";  
  179.                 bidStrlist[9] = "exec";  
  180.                 bidStrlist[10] = "net localgroup";  
  181.                 bidStrlist[11] = "select";  
  182.                 bidStrlist[12] = "asc";  
  183.                 bidStrlist[13] = "char";  
  184.                 bidStrlist[14] = "mid";  
  185.                 bidStrlist[15] = "insert";  
  186.                 bidStrlist[19] = "order";  
  187.                 bidStrlist[20] = "exec";  
  188.                 bidStrlist[21] = "delete";  
  189.                 bidStrlist[22] = "drop";  
  190.                 bidStrlist[23] = "truncate";  
  191.                 bidStrlist[24] = "xp_cmdshell";  
  192.                 bidStrlist[25] = "<";  
  193.                 bidStrlist[26] = ">";  
  194.                 string tempStr = strString.ToLower();  
  195.                 for (int i = 0; i < bidStrlist.Length; i++)  
  196.                 {  
  197.                     if (tempStr.IndexOf(bidStrlist[i]) != -1)  
  198.                     //if (tempStr == bidStrlist[i])  
  199.                     {  
  200.                         outValue = true;  
  201.                         break;  
  202.                     }  
  203.                 }  
  204.             }  
  205.             return outValue;  
  206.         }  
  207.  
  208.         #endregion  
  209.  
  210.         #region Tools  
  211.         /// <summary>  
  212.         /// 去掉最后一个逗号  
  213.         /// </summary>  
  214.         /// <param name="String">要做处理的字符串</param>  
  215.         /// <returns>去掉最后一个逗号的字符串</returns>  
  216.         public static string DelLastComma(string String)  
  217.         {  
  218.             if (String.IndexOf(",") == -1)  
  219.             {  
  220.                 return String;  
  221.             }  
  222.             return String.Substring(0, String.LastIndexOf(","));  
  223.         }  
  224.   
  225.         /// <summary>  
  226.         /// 删除最后一个字符  
  227.         /// </summary>  
  228.         /// <param name="str"></param>  
  229.         /// <returns></returns>  
  230.         public static string ClearLastChar(string str)  
  231.         {  
  232.             return (str == "") ? "" : str.Substring(0, str.Length - 1);  
  233.         }  
  234.         /// <summary>  
  235.         /// html编码  
  236.         /// </summary>  
  237.         /// <param name="chr"></param>  
  238.         /// <returns></returns>  
  239.         public static string html_text(string chr)  
  240.         {  
  241.             if (chr == null)  
  242.                 return "";  
  243.             chr = chr.Replace("'""''");  
  244.             chr = chr.Replace("<""<");  
  245.             chr = chr.Replace(">"">");  
  246.             return (chr);  
  247.         }  
  248.         /// <summary>  
  249.         /// html解码  
  250.         /// </summary>  
  251.         /// <param name="chr"></param>  
  252.         /// <returns></returns>  
  253.         public static string text_html(string chr)  
  254.         {  
  255.             if (chr == null)  
  256.                 return "";  
  257.             chr = chr.Replace("<""<");  
  258.             chr = chr.Replace(">"">");  
  259.             return (chr);  
  260.         }  
  261.         public static bool JustifyStr(string strValue)  
  262.         {  
  263.             bool flag = false;  
  264.             char[] str = "^<>'=&*, ".ToCharArray(0, 8);  
  265.             for (int i = 0; i < 8; i++)  
  266.             {  
  267.                 if (strValue.IndexOf(str[i]) != -1)  
  268.                 {  
  269.                     flag = true;  
  270.                     break;  
  271.                 }  
  272.             }  
  273.             return flag;  
  274.         }  
  275.         public static string CheckOutputString(string key)  
  276.         {  
  277.             string OutputString = string.Empty;  
  278.             OutputString = key.Replace("<br>""\n").Replace("<""<").Replace(">"">").Replace(" "" ");  
  279.             return OutputString;  
  280.   
  281.         }  
  282.         #endregion  
  283.     }  

  评论这张
 
阅读(3707)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016