Fli*_*imm 5 html javascript xhtml
我正在为一个框架编写一个服务器端函数,它可以让我内联一个 Javascript 文件。它以文件名作为输入,其输出如下所示:
<script>
/* contents of Javascript file */
</script>
Run Code Online (Sandbox Code Playgroud)
如何安全地转义 Javascript 文件的内容?
如果文件包含类似</script>. 如果输入的 Javascript 文件有语法错误,我仍然希望它正确转义。我还意识到 XHTML 需要对某些实体进行编码,而 HTML 则不需要。
有很多类似的问题询问如何转义字符串文字或 JSON。但是我想要一些可以处理一般情况的东西,以便我可以为一般情况编写一个工具。
(我意识到内联可能不受信任的 Javascript 并不是最好的主意,因此无需花时间讨论。)
这是一项正在进行的工作,如果我错过了一个极端案例,请告诉我!
根据您使用的是 XHTML 还是 HTML,答案会有所不同。
Content-Type: application/xhtml+xml标题的XHTML在这种情况下,您可以简单地通过 XML 转义任何实体,从而转换此文件:
console.log("Example Javascript file");
console.log(1</script>2/);
console.log("That previous line prints false");
Run Code Online (Sandbox Code Playgroud)
对此:
<script>
console.log("Example Javascript file");
console.log(1</script>2/);
console.log("That previous line prints false");
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用具有不同Content-Type标头的 XHTML,则不同浏览器的行为可能会有所不同,而且我还没有研究过,因此我建议修复标Content-Type头。
不幸的是,我知道在这种情况下没有办法正确地转义它(至少不解析 JavaScript)。将所有实例替换为/with\/会导致某些 Javascript 崩溃,包括前面的示例。
我能推荐的最好的办法是不区分大小写地搜索</script,如果找到它就抛出异常。如果您只处理字符串文字或 JSON,请将所有实例替换/为\/。
一些 Javascript 压缩器可能会以一种安全的方式处理</script,如果你找到了,请告诉我。