禁用 div 中的所有 javascript

4

有没有办法在特定的div中禁用所有JavaScript?
我最初认为<noscript>标签是用于此目的,但事实证明我错了。

这是我要找的内容:

<some-sort-of-tag-here>
    <script>
        alert('test');
    </script>
</some-sort-of-tag-here>

将被呈现为:

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

不要执行脚本。这将防止任何形式的XSS,其他外部JavaScript(已包含在头部)将能够修改给定的标记。

我可能完全错误,这样的标记可能根本不存在,但请帮助我解决问题。我觉得这样的标记将是XSS最简单的解决方案。无需担心标记内执行任何脚本(这意味着所有用户内容都可以包装在该标记中),而所有网站包含的javascript将能够根据需要修改页面内容。

如何创建一个标记,在其中所有内容都被视为纯HTML,而不执行任何形式的JavaScript?


你可以在JS中对用户内容进行合理性检查。据我所知,没有特定的标签来防止它。这完全取决于你自己。可能你正在使用一个已经积极保护用户内容的框架。一般的经验法则是,用户都是可疑的黑客恶棍,你应该验证所有内容。根据你使用的内容,很可能已经有相应的模块了。 - laminatefish
@LokiSinclair 是的,你说得对。我目前正在清理我的用户输入。但是,如果我有这样一个标记,我就不必担心代码被从其他地方(如引荐人或其他地方)注入。这会让生活变得更加轻松。:P 如果HTML规范有这样的功能就好了。:P - Rakshith Ravi
2个回答

2
很抱歉,这样的标签并不存在,您需要自己对内容进行HTML编码。
因此,将会变成这样:
<script>
    alert('test');
</script>

变成这样:

&lt;script&gt;
    alert('test');
&lt;/script&gt;

此外请注意,如果有一个安全标签,像这样:
<safe>
    <script>
        alert('test');
    </script>
</safe>

任何人都可以通过制作自己的内容来规避此问题:
</safe>
<script>
    alert('test');
</script>
<safe>

是的,我同意。人们可以绕过安全标签。我最初想要将所有</safe>标签替换为空字符串以防止转义,但这与替换<script>标签相同,不是吗?哦,好吧。我们回到原点了。 - Rakshith Ravi
大多数服务器端语言都有一种HTML编码内容的方式。然而,Javascript没有,但是在stackoverflow上有很多自定义解决方案的例子。 - Stanislas

1
有趣的概念。您希望它能够显示代码而不运行吗?如果是这样,xmp标签可能是一种方式。
<xmp>
<script>
    alert('test');
</script>
</xmp>

然而xmp已被弃用,不能保证在所有浏览器上正常工作(尽管大多数浏览器正确处理它)。因此,解决方法是使用添加格式的textarea。像这样:

<textarea disabled="true" style="border: none;background-color:white;">
    <script>
        alert('test');
    </script>
</textarea>

等等...什么?HTML在文本区域内被呈现? - Rakshith Ravi
不,只需返回纯文本,保持标签的原样写入。 - pastaleg
如果我的内容是:</textarea><script>alert...,会怎么样? - Stanislas
啊...这就是问题所在。我原本想要有一个能够呈现HTML但不执行JavaScript的东西。这样我们可以在body标签的开头放置这个标签,避免任何形式的脚本执行,同时仍然呈现HTML内容。 - Rakshith Ravi
@Stanislas 是的,我试图通过将 disabled=true 来避免让用户编辑内部内容,但如果用户提交了该内容,就需要进行检查以删除该标签。 - pastaleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接