C# 过滤特殊字符

1.过滤不安全的字符串

/// <summary>
/// 过滤不安全的字符串
/// </summary>
/// <param name="Str"></param>
/// <returns></returns>
public static string FilteSQLStr(string Str)
    {
        Str = Str.Replace("'", "");
        Str = Str.Replace("\"", "");
        Str = Str.Replace("&", "&amp");
        Str = Str.Replace("<", "&lt");
        Str = Str.Replace(">", "&gt");
        Str = Str.Replace("delete", "");
        Str = Str.Replace("update", "");
        Str = Str.Replace("insert", "");
        return Str; 
    }

2.过滤 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;
}

3.过滤SQL字符

/// 过滤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.过滤标记

/// <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.

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;
}
tag(s): C#
show comments · back · home
Edit with Markdown

已有 5 条评论

  1. tzbkpjywbt

    建议后续持续追踪此话题,形成系列研究。

    tzbkpjywbt February 28th, 2025 at 10:05 pm回复
  2. gohkjrwmsc

    文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。

    gohkjrwmsc March 4th, 2025 at 03:43 pm回复
  3. exqbfatigl

    这篇文章不错!

    exqbfatigl March 7th, 2025 at 12:46 am回复
  4. vhhtojqbpn

    新盘首开 新盘首开 征召客户!!!

    vhhtojqbpn October 6th, 2025 at 01:24 pm回复
  5. jphevilrvv

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

    jphevilrvv October 7th, 2025 at 05:54 pm回复