前天,写的系统被测评。测评的人在我的页面textbox输入 <script>alert("test")</script> 内容。刷新页面这个脚本被执行弹出对话框。大家帮忙出出注意,这个最佳解决方案是啥

解决方案 »

  1.   

    学习 把< 和 >替换掉。
      

  2.   


        public static string HTMLEncode(string txt)
        {
            string Ntxt = txt;
            Ntxt = Ntxt.Replace(" ", "&nbsp;");
            Ntxt = Ntxt.Replace("<", "&lt;");
            Ntxt = Ntxt.Replace(">", "&gt;");
            Ntxt = Ntxt.Replace("\"", "&quot;");
            Ntxt = Ntxt.Replace("'", "&#39;");
            Ntxt = Ntxt.Replace("\n", "<br>");
            return Ntxt;
        }
      

  3.   

    但是假设说你允许输入html,那么就要另外处理。比如说你允许用户输入<h1></h1>这样的,并且作为html来解析,那么就要另外下点功夫去查找脚本代码(并不是全都在<script />中的。使用ubb当然简单哆啦,只不过不太支持所见即所得的方式。如果你的web界面上支持rtf之类的,例如silverlight的TextBlock等许多对象都支持RTF,再配合一个RTF编辑器,可以杜绝这类问题。
      

  4.   

    牛X啊。
    可以过滤一下HTML代码呀。
    或者替换特殊字符
      

  5.   

    把好在提交时就做好过滤 </script>有这样的字符,不让写
      

  6.   

       System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    html = regex1.Replace(html, ""); //过滤<script></script>标记
      

  7.   

    HtmlEncode
        和
    Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);//<script></script>标记    根据需要选择
      

  8.   

    HtmlEncode 
    和  
    System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    html = regex1.Replace(html, "");
      

  9.   

    入力数据的时候用HtmlDecode,取出数据的时候用HtmlEncode,
      

  10.   

    存入的时候用HtmlEncode编码,此时数据敏感字符被转义,取出来的时候不用进行解码,因为在html显示就直接自动转码了
      

  11.   

    微软不是有个库么
    AntiXSS Library
      

  12.   

    推荐 HtmlEncode别人可以构造出来一个特殊的字符串绕过你的判断
      

  13.   

      /// <summary>
            /// 禁止"javascript","vbscript","script","iframe","link","style"等高危代码的执行 (目前比较局限,待用正则进行改进完善)
            /// </summary>
            public static string HtmlScriptFilter(string strInput)
            {
                strInput = strInput.ToLower();
                if (String.IsNullOrEmpty(strInput))
                {
                    return "";
                }
                else
                {
                    string strResult = strInput;
                    //script
                    strResult = strResult.Replace("<script", "&lt;script");
                    strResult = strResult.Replace("</script>", "&lt;/script&gt;");
                    //vbscript
                    strResult = strResult.Replace("<vbscript", "&lt;vbscript");
                    strResult = strResult.Replace("</vbscript>", "&lt;/vbscript&gt;");
                    //iframe
                    strResult = strResult.Replace("<iframe", "&lt;iframe");
                    strResult = strResult.Replace("</iframe>", "&lt;/iframe&gt;");
                    //style
                    strResult = strResult.Replace("<style", "&lt;style");
                    strResult = strResult.Replace("</style>", "&lt;/style&gt;");
                    //link
                    strResult = strResult.Replace("<link", "&lt;link");
                    strResult = strResult.Replace("</link>", "&lt;/link&gt;");
                    //javascript
                    strResult = strResult.Replace("javascript:", "javascript&nbsp;:");
                    //vbscript
                    strResult = strResult.Replace("vbscript:", "vbscript&nbsp;:");
                    //ecmascript
                    strResult = strResult.Replace("ecmascript:", "ecmascript&nbsp;:");                return strResult;
                }
            }
      

  14.   

    <script>alert("myjs");</script>测试js
      

  15.   

    <script>alert("myjs");</script>  测试js