前端 HTML5 + JS Escapers

dewj · October 25, 2019 · 1 hits

HTML5 在解析标签<script>时可能会出现以下三种数据状态:

  • script data escaped dash dash state;
  • script data escaped state;
  • script data double escaped state.

其中处于 escaped state 与 double escaped state 的状态会被当做 js 语句执行。 具体到标签中:

<script type = "text/javascript">  
    <!-- script data escaped dash dash state 
        this is script data escaped state
        <script> this is script data double escaped state
        </script>
        this is script data escaped state
    -->
< /script>

HTML5 解析器在<script></script>标签中解析到<!--时候,会进入到 dash dash escaped state,哪怕是<!--出现在 js 的字符串中,如下

<script>
    if(console.log("<!--var a;<script>")</script>/)
        alert("script data state");
    else
        alert("script data state too");
        -->
</script>

上述代码的运行结果为: 控制台输出<!--var a;<script> 弹窗弹出 script data state too 不会出现 js 错误信息。

说明: <!--触发的状态会持续到遇到>为止,上面的代码如果不加<script>,那么<!--就会因为遇到</script>中的>而结束。 如果不加-->那么 js 会运行到 HTML5 文档的最末尾 EOF 结束,从而导致解析错误。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.