本文实例讲述了C#实现过滤sql特殊字符的方法集合。分享给大家供大家参考,具体如下:
1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/// <summary> /// 过滤不安全的字符串 /// </summary> /// <param name="Str"></param> /// <returns></returns> public static string FilteSQLStr( string Str) { Str = Str.Replace( "'" , "" ); Str = Str.Replace( "\"" , "" ); Str = Str.Replace( "&" , "&" ); Str = Str.Replace( "<" , "<" ); Str = Str.Replace( ">" , ">" ); Str = Str.Replace( "delete" , "" ); Str = Str.Replace( "update" , "" ); Str = Str.Replace( "insert" , "" ); return Str; } |
2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#region 过滤 Sql 语句字符串中的注入脚本 /// <summary> /// 过滤 Sql 语句字符串中的注入脚本 /// </summary> /// <param name="source">传入的字符串</param> /// <returns>过滤后的字符串</returns> public static string SqlFilter( string source) { //单引号替换成两个单引号 source = source.Replace( "'" , "''" ); //半角封号替换为全角封号,防止多语句执行 source = source.Replace( ";" , ";" ); //半角括号替换为全角括号 source = source.Replace( "(" , "(" ); source = source.Replace( ")" , ")" ); ///////////////要用正则表达式替换,防止字母大小写得情况//////////////////// //去除执行存储过程的命令关键字 source = source.Replace( "Exec" , "" ); source = source.Replace( "Execute" , "" ); //去除系统存储过程或扩展存储过程关键字 source = source.Replace( "xp_" , "x p_" ); source = source.Replace( "sp_" , "s p_" ); //防止16进制注入 source = source.Replace( "0x" , "0 x" ); return source; } #endregion |
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/// 过滤SQL字符。 /// </summary> /// <param name="str">要过滤SQL字符的字符串。</param> /// <returns>已过滤掉SQL字符的字符串。</returns> public static string ReplaceSQLChar( string str) { if (str == String.Empty) return String.Empty; str = str.Replace( "'" , "‘" ); str = str.Replace( ";" , ";" ); str = str.Replace( "," , "," ); str = str.Replace( "?" , "?" ); str = str.Replace( "<" , "<" ); str = str.Replace( ">" , ">" ); str = str.Replace( "(" , "(" ); str = str.Replace( ")" , ")" ); str = str.Replace( "@" , "@" ); str = str.Replace( "=" , "=" ); str = str.Replace( "+" , "+" ); str = str.Replace( "*" , "*" ); str = str.Replace( "&" , "&" ); str = str.Replace( "#" , "#" ); str = str.Replace( "%" , "%" ); str = str.Replace( "$" , "¥" ); return str; } |
4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/// <summary> /// 过滤标记 /// </summary> /// <param name="NoHTML">包括HTML,脚本,数据库关键字,特殊字符的源码 </param> /// <returns>已经去除标记后的文字</returns> public string NoHtml( string Htmlstring) { if (Htmlstring == null ) { return "" ; } else { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>" , "" , RegexOptions.IgnoreCase); //删除HTML Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"-->" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"<!--.*" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);" , "\"" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);" , "&" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);" , "<" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);" , ">" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);" , " " , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);" , "\xa1" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);" , "\xa2" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);" , "\xa3" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);" , "\xa9" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "xp_cmdshell" , "" , RegexOptions.IgnoreCase); //删除与数据库相关的词 Htmlstring = Regex.Replace(Htmlstring, "select" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "insert" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "delete from" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "count''" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "drop table" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "truncate" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "asc" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "mid" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "char" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "xp_cmdshell" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "exec master" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "net localgroup administrators" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "and" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "net user" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "or" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "net" , "" , RegexOptions.IgnoreCase); //Htmlstring = Regex.Replace(Htmlstring, "*", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "-" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "delete" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "drop" , "" , RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "script" , "" , RegexOptions.IgnoreCase); //特殊的字符 Htmlstring = Htmlstring.Replace( "<" , "" ); Htmlstring = Htmlstring.Replace( ">" , "" ); Htmlstring = Htmlstring.Replace( "*" , "" ); Htmlstring = Htmlstring.Replace( "-" , "" ); Htmlstring = Htmlstring.Replace( "?" , "" ); Htmlstring = Htmlstring.Replace( "'" , "''" ); Htmlstring = Htmlstring.Replace( "," , "" ); Htmlstring = Htmlstring.Replace( "/" , "" ); Htmlstring = Htmlstring.Replace( ";" , "" ); Htmlstring = Htmlstring.Replace( "*/" , "" ); Htmlstring = Htmlstring.Replace( "\r\n" , "" ); Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim(); return Htmlstring; } } |
5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public static bool CheckBadWord( string str) { string pattern = @"select|insert|delete|from|count\(|drop table|update|truncate|asc\(|mid\(|char\(|xp_cmdshell|exec master|netlocalgroup administrators|net user|or|and" ; if (Regex.IsMatch(str, pattern, RegexOptions.IgnoreCase)) return true ; return false ; } public static string Filter( string str) { string [] pattern ={ "select" , "insert" , "delete" , "from" , "count\\(" , "drop table" , "update" , "truncate" , "asc\\(" , "mid\\(" , "char\\(" , "xp_cmdshell" , "exec master" , "netlocalgroup administrators" , "net user" , "or" , "and" }; for ( int i = 0; i < pattern.Length; i++) { str = str.Replace(pattern[i].ToString(), "" ); } return str; } |
希望本文所述对大家C#程序设计有所帮助。