首页新闻找找看学习计划

asp.net 编辑器如何过滤危险字符

0
[待解决问题]

因为编辑器可以输入任意字符。包括脚本 以及 iframe 之类 或者 在 img 标签里面 输入一些非法的脚本 等等情况。请问如来来过滤掉这些内容。 网上找了一些过滤方法 感觉会把原本输入的一些内容东西给过滤掉了 显示的时候就乱掉了。代码如下。

 /// <summary>
        /// 过滤 html 危险字符
        /// </summary>
        /// <param name="html">内容</param>
        /// <returns></returns>
        public static string FilterHTML(string html)
        {
            if (html == null)
                return "";
            System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" on[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"\<img[^\>]+\>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"</p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"<p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            html = regex1.Replace(html, ""); //过滤<script></script>标记
            html = regex2.Replace(html, ""); //过滤href=javascript: (<A>) 属性
            html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件
            html = regex4.Replace(html, ""); //过滤iframe
            html = regex5.Replace(html, ""); //过滤frameset
            html = regex6.Replace(html, ""); //过滤frameset
            html = regex7.Replace(html, ""); //过滤frameset
            html = regex8.Replace(html, ""); //过滤frameset
            html = regex9.Replace(html, "");
            html = html.Replace(" ", "");
            html = html.Replace("</strong>", "");
            html = html.Replace("<strong>", "");
            return html;
        }
yzy的主页 yzy | 菜鸟二级 | 园豆:309
提问于:2013-08-31 15:58
< >
分享
所有回答(4)
0

对HTML内容,可以用HTML转义符进行标签符号替换。

 

Content=Regex.Replace(Content,"<","&lt;"); //过滤HTML代码

Content=Regex.Replace(Content,">","&gt;");

Content=Regex.Replace(Content,"\r","<BR>"); //回车

Content=Regex.Replace(Content," ","&nbsp;&nbsp;"); //空格

Content=Regex.Replace(Content,"\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");//水平 Tab

Mundo Novo | 园豆:82 (初学一级) | 2013-08-31 17:29
0

HTML  过滤直接  删除或者替换带 <>的字符串就行了 
或者用1L的方法  

落幕残情 | 园豆:9 (初学一级) | 2013-09-01 22:13
0

我擦……

 

Server.HtmlEncode(“输入的危险符号”)

 

早在Asp.net 2.0的时候,这个方法都有了吧。怎么这么多人不知道。

 

HttpUnity.HtmlEncode(“这个方法也管用”)。

 

Asp.net框架自带这些 过滤危险字符的方法。怎么这么多人不知道。

 

还要自己写方法来判断

田麦成 | 园豆:1982 (小虾三级) | 2013-09-02 10:48

HtmlEncode方法 可以把对应的html代码编码后进行显示。假如显示编辑器里面编写的文字 要加粗。并且颜色变成红色,还有就是分成不同的段落。按你说的 是不是 把p标签那些都按原样显示出来了。用编辑器 就是为了方便用户可以定义一些 显示样式效果。

支持(0) 反对(0) yzy | 园豆:309 (菜鸟二级) | 2013-09-02 14:05
-1

<script>while(1==1){alert('这个站长是个笨蛋');}</script>

落日云烟 | 园豆:218 (菜鸟二级) | 2014-08-11 22:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册