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


 < script>
 / * Javascript文件的内容* /
< / script>



 如何逃避内容安全的Javascript文件?


如果文件包含< / script>
之类的内容,我特别担心。如果输入的Javascript文件有语法错误,我仍然希望它正确转义。我也意识到XHTML期望一些实体被编码,而HTML则没有。
有很多问题类似于这个询问如何转义字符串文字或JSON 。但是我想要能够处理一般情况的东西,以便我可以为一般情况编写工具。


(我意识到内联可能不受信任的Javascript isn'最好的主意,所以不需要花时间讨论这个问题。)

答案 0 :(得分:2)
这是一项正在进行中的工作,如果我错过了一个角落案件,请告诉我!


根据您使用的是XHTML还是HTML


 Content-Type:application / xhtml + xml
header 在这种情况下,您可以简单地XML转义任何实体,转换此文件:


 console.log(“示例Javascript文件”);
 console.log(1< / script> 2 /);
 console.log(“前一行打印为false”);



 对此:

&#xA ; < script>
 console.log(& quot; Example Javascript file& quot;);
 console.log(1& lt; / script& gt; 2 / );
 console.log(& quot;前一行打印false& quot;);
< / script>


& #xA; 请注意,如果您使用的XHTML具有不同的 Content-Type
标头,那么不同的浏览器可能会有不同的行为,我还没有研究它,所以我建议修复 Content-Type
标题。
不幸的是,我知道在这种情况下无法正确地逃避它(至少不解析Javascript)。用 \ /
替换 /
的所有实例会导致一些Javascript中断,包括上一个例子。
我建议的最好的是你不区分大小写地搜索< / script
并在你找到它时抛出异常。如果您只处理字符串文字或JSON,请将 /
的所有实例替换为 \ /
。
一些Javascript minifiers可能会以安全的方式处理< / script
,如果你找到一个,请告诉我。