日期:2014-05-17  浏览次数:20428 次

Regex.Replace 通过正则表达式替换
各位大侠们,帮帮小弟吧。我现在想做一个防SQL注入的页面 需要过滤 and 等关键字,
像acband、andabc、avandc的不需要过滤替换,只要 and 前后不是字符,数字和下划线的 都要给AND直接替换掉。该如何实现呢?

  private static string sqlFileterStr = "delete|drop|select|null|where|@@|#|$|max|sysadmin|db_owner|db_name|cmdshell|" +
                                              "'|;|and|or|exec|insert|update|=|count|%|chr|mid|master|truncate|char|declare|" +
                                              "--|net user|xp_cmdshell|/add|exec master.dbo.xp_cmdshell|net localgroup administrators|asc|''|from|";

            private static string FilterString(string badString, string content)
        {
            Regex objRegex = new Regex(badString, RegexOptions.IgnoreCase);
            content = objRegex.Replace(content, "");
            return content;
        }
我现在的代码是这样写的,只要发现关键字就会被替换。我想要的效果是当关键字前后不是数字,下划线,字符的才被替换。
正则表达式 regex

------解决方案--------------------
[\s]+and[\s]+
------解决方案--------------------
(?is)(?<=^
------解决方案--------------------
\s)and(?=\s
------解决方案--------------------
$)
------解决方案--------------------
可怜的公司。

这种想当然的“替换”违背了基本的程序设计要求、基本的业务逻辑设要求。

比如说有个“日志信息”中包含char或者#号,就算前后都不是什么“字符、下划线”,你凭什么给人家录入信息改的面目全非?

人家录入什么信息就应该写入数据库什么信息。凭什么替换?替换为什么才合适?


------解决方案--------------------
引用:
(?is)(?<=^
------解决方案--------------------
\s)and(?=\s
------解决方案--------------------
$)

+1