gpt4 book ai didi

javascript - 如何在 <script> 标记中正确转义内联 Javascript?

转载 作者:可可西里 更新时间:2023-11-01 13:28:00 24 4
gpt4 key购买 nike

我正在为一个框架编写一个服务器端函数,它可以让我内联一个 Javascript 文件。它以文件名作为输入,它的输出是这样的:

<script>
/* contents of Javascript file */
</script>

如何安全地转义 Javascript 文件的内容?

我特别担心文件是否包含类似 </script> 的内容.如果输入的 Javascript 文件有语法错误,我仍然希望它能正确转义。我还意识到 XHTML 需要对某些实体进行编码,而 HTML 则不需要。

关于how to escape string literals or JSON的类似问题还有很多.但我想要一些可以处理一般情况的东西,这样我就可以为一般情况编写一个工具。

(我意识到内联可能不受信任的 Javascript 并不是最好的主意,因此无需花时间讨论它。)

最佳答案

这是一项正在进行的工作,如果我错过了一个 Angular 落案例,请告诉我!

答案会有所不同,具体取决于您使用的是 XHTML 还是 HTML。

1。 XHTML 与 Content-Type: application/xhtml+xml标题

在这种情况下,您可以简单地对任何实体进行 XML 转义,从而转换此文件:

console.log("Example Javascript file");
console.log(1</script>2/);
console.log("That previous line prints false");

对此:

<script>
console.log(&quot;Example Javascript file&quot;);
console.log(1&lt;/script&gt;2/);
console.log(&quot;That previous line prints false&quot;);
</script>

请注意,如果您使用带有不同 Content-Type 的 XHTML header ,那么不同的浏览器可能会有不同的行为,我还没有研究过,所以我建议修复 Content-Type标题。

2。 HTML

不幸的是,我知道在这种情况下没有办法正确地转义它(至少不解析 Javascript)。替换 / 的所有实例与 \/会导致某些 Javascript 中断,包括前面的示例。

我能推荐的最好的方法是搜索 </script不区分大小写,如果找到则抛出异常。如果您只处理字符串文字或 JSON,请替换所有 / 的实例与 \/ .

一些 Javascript 压缩器可能会处理 </script也许以一种安全的方式,如果你找到了请告诉我。

关于javascript - 如何在 &lt;script&gt; 标记中正确转义内联 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com