zoukankan      html  css  js  c++  java
  • 警惕javascript代码中的“</script>”!

            之前在写《博客园自定义博客侧边栏公告的过滤漏洞的时候遇到了一个javascript代码报错语法错误的问题一直不得以解决感谢Arliang发现了并为我进行了耐心的解释,现整理如下:

            javascript代码中只要出现了“</script>”,无论是在引号中还是在注释中都会被认为是script标签的结束,例如:

    示例1:

    1 <script>
    2     alert("aaa");
    3 //</script>
    4     alert("bbb");
    5 </script>

            以上代码中第2行会被成功执行,但是遇到第3行的“</script>”的时候,script标签就会被结束,所以第4行无法执行,只能被作为普通的HTML文档原样显示出来。第5行的“</script>”成为了无用代码。上面的代码完全等价于:

    <script>
        alert("aaa");
    </script>
    
    alert("bbb");

    示例2:

    1 <script>
    2     /*
    3     alert("aaa");
    4 </script>
    5     */
    6     alert("bbb");
    7 </script>

            这段代码和示例1如出一辙,第3行代码因为在注释块中所以不会执行,当遇到第4行中的“</script>”的时候script标签即被结束,于是第5、6行就被当成HTML文档原样显示,第7行成了无用代码。以上代码完全等价于:

    <script>
    </script>
    
    */alert("bbb");

    示例3:

    1 <script>
    2     var str='<script>alert("aaa");</script>';
    3     document.write(str);
    4 </script>

            这段代码中,第2行的“</script>”会被认为是结束script标签,于是给字符串变量str赋值的操作就因缺少后引号而报语法错误,而第2行最后的“';”会被当成普通HTML文档原样显示;第3行页因在script标签外而被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:

    <script>
        var str='<script>alert("aaa");
    </script>
    
    ';document.write(str);

    示例4:

    1 <script>
    2     alert('</script>');
    3     alert('aaa');
    4 </script>

            一样的,第2行中的“</script>”会被当成script标签的结束,于是alert方法因为缺少后引号和右括号而被判定为语法错误,同时第2行剩下的“');”会被当成普通HTML文档原样显示;第3行因为不在script标签内,所以也会被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:

    <script>
        alert('
    </script>
    
    ');alert('aaa');

    总结:

            javascript代码中不要尝试注释“</script>”,如果不用就直接删掉,否则会导致奇怪的语法或逻辑错误;代码中如果要把“</script>”当字符串处理一定要将其分割,如

    str='</'+'script>';

            本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook

  • 相关阅读:
    题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP
    BZOJ 1867 [Noi1999]钉子和小球 DP
    P5057 [CQOI2006]简单题 前缀异或差分/树状数组
    P2051 [AHOI2009]中国象棋 大力DP
    P4208 [JSOI2008]最小生成树计数
    BZOJ 2440 [中山市选2011]完全平方数 二分+容斥
    Luogu P1951 收费站_NOI导刊2009提高(2) 二分 最短路
    Luogu P3527 [POI2011]MET-Meteors 整体二分
    Luogu P4109 [HEOI2015]定价 贪心
    Luogu P2114_[NOI2014]起床困难综合症 贪心
  • 原文地址:https://www.cnblogs.com/libook/p/3189865.html
Copyright © 2011-2022 走看看