当前位置:编程学习 > C#/ASP.NET >>

数据提交的是后为什么要对字符串进行JS,HTML,CSS过滤

为什么呢? --------------------编程问答--------------------  防止 用户提交一个 JS,HTML,CSS        
比如说 用户评论的时候 在文本框里面 输入一个  <button ID="button " type="button ">评论</button>
这样你数据读取到页面     评论页面就会显示一个button 很难看的 --------------------编程问答-------------------- 严重的话    提交一个 js 脚本 让你狂打开页面        --------------------编程问答-------------------- 防止注入啊,
如果别人给你注入一下,然后你又没有防止,就会出现易做图烦的
比如给你注入一个脚本,跳转到百度的那么,那么一打开网页就跳到百度了,还怎么看你的网站啊 --------------------编程问答-------------------- 哦,这样的啊 --------------------编程问答-------------------- 对呀,你想想,本来画的挺好的一个页面,结果人家给你弄进来两个div,结果导致整个页面的样式乱了,多麻烦啊
又或者是数据库的注入,影响安全 --------------------编程问答--------------------
引用 5 楼 qiudong_5210 的回复:
对呀,你想想,本来画的挺好的一个页面,结果人家给你弄进来两个div,结果导致整个页面的样式乱了,多麻烦啊
又或者是数据库的注入,影响安全


。。。页面提交,如何注入? --------------------编程问答-------------------- insert可以进行SQL injection? --------------------编程问答-------------------- 不过滤要出错。。有些脚本。。

你在文本框里输入script 在提交 看看啥情况了。。

HTML转换。。。

 /// <summary>
        /// 插入SQL时替换字符
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Encode(string str)
        {
            str = str.Replace("'", "''");
            str = str.Replace("\"", """);
            str = str.Replace("<", "<");
            str = str.Replace(">", ">");
            str = str.Replace("\n", "<br>");
            str = str.Replace("“", "“");
            str = str.Replace("”", "”");
            return str;
        }

        /// <summary>
        /// 取SQL值时还原字符
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Decode(string str)
        {
            str = str.Replace("”", "”");
            str = str.Replace("“", "“");
            str = str.Replace("<br>", "\n");
            str = str.Replace(">", ">");
            str = str.Replace("<", "<");
            str = str.Replace(""", "\"");
            str = str.Replace("''", "'");
            return str;
        }


用这个来替换

--------------------编程问答-------------------- 可是我输入<script>alert('地地道道)</script>的时候,提交成功,但是内容是空的 可是我的文本框输入要求是非空的 --------------------编程问答-------------------- 这是过滤的源码
        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(@" no[\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; --------------------编程问答-------------------- 有人知道为什么会出现这种情况吗?
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,