欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【转载】C#防SQL注入过滤危险字符信息

程序员文章站 2023-12-10 09:33:04
不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的危险,以下是C#防止SQL注入攻击的一个危险字符过滤函数,过滤掉相应的数据库关键字。 主要过滤两类字 ......

不过是java开发还是c#开发或者php的开发中,都需要关注sql注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生sql注入的风险,我们需要对接收的数据进行危险字符过滤来防范sql注入攻击的危险,以下是c#防止sql注入攻击的一个危险字符过滤函数,过滤掉相应的数据库关键字。

主要过滤两类字符:(1)一些sql中的标点符号,如@,*以及单引号等等;(2)过滤数据库关键字select、insert、delete from、drop table、truncate、mid、delete、update、truncate、declare、master、script、exec、net user、drop等关键字或者关键词。

封装好的方法如下:

  

 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("$", "");

            //删除与数据库相关的词
            str = regex.replace(str, "select", "", regexoptions.ignorecase);
            str = regex.replace(str, "insert", "", regexoptions.ignorecase);
            str = regex.replace(str, "delete from", "", regexoptions.ignorecase);
            str = regex.replace(str, "count", "", regexoptions.ignorecase);
            str = regex.replace(str, "drop table", "", regexoptions.ignorecase);
            str = regex.replace(str, "truncate", "", regexoptions.ignorecase);
            str = regex.replace(str, "asc", "", regexoptions.ignorecase);
            str = regex.replace(str, "mid", "", regexoptions.ignorecase);
            str = regex.replace(str, "char", "", regexoptions.ignorecase);
            str = regex.replace(str, "xp_cmdshell", "", regexoptions.ignorecase);
            str = regex.replace(str, "exec master", "", regexoptions.ignorecase);
            str = regex.replace(str, "net localgroup administrators", "", regexoptions.ignorecase);
            str = regex.replace(str, "and", "", regexoptions.ignorecase);
            str = regex.replace(str, "net user", "", regexoptions.ignorecase);
            str = regex.replace(str, "or", "", regexoptions.ignorecase);
            str = regex.replace(str, "net", "", regexoptions.ignorecase);
            str = regex.replace(str, "-", "", regexoptions.ignorecase);
            str = regex.replace(str, "delete", "", regexoptions.ignorecase);
            str = regex.replace(str, "drop", "", regexoptions.ignorecase);
            str = regex.replace(str, "script", "", regexoptions.ignorecase);
            str = regex.replace(str, "update", "", regexoptions.ignorecase);
            str = regex.replace(str, "and", "", regexoptions.ignorecase);
            str = regex.replace(str, "chr", "", regexoptions.ignorecase);    
            str = regex.replace(str, "master", "", regexoptions.ignorecase);
            str = regex.replace(str, "truncate", "", regexoptions.ignorecase);
            str = regex.replace(str, "declare", "", regexoptions.ignorecase);
            str = regex.replace(str, "mid", "", regexoptions.ignorecase);

            return str;
        }

 

备注:原文转载自c#防sql注入过滤危险字符信息_it技术小趣屋