在iframe/div中禁用JavaScript

在iframe/div中禁用JavaScript,javascript,iframe,Javascript,Iframe,我正在制作一个小的HTML页面编辑器。编辑器将文件加载到iframe中。从那里,它可以添加、修改或删除页面上具有新属性、样式等的元素。问题在于,JavaScript(和/或其他编程语言)可以在加载页面时在开始编辑元素之前完全修改页面。因此,保存时,它不会保存原始标记,而是保存修改后的页面+您的更改 因此,我需要一些方法来禁用iframe上的JavaScript,或者在JavaScript开始修改页面之前删除所有JavaScript。(我想我最终必须为PHP解析文件,但这应该不会太难)我考虑过编写

我正在制作一个小的HTML页面编辑器。编辑器将文件加载到iframe中。从那里,它可以添加、修改或删除页面上具有新属性、样式等的元素。问题在于,JavaScript(和/或其他编程语言)可以在加载页面时在开始编辑元素之前完全修改页面。因此,保存时,它不会保存原始标记,而是保存修改后的页面+您的更改

因此,我需要一些方法来禁用iframe上的JavaScript,或者在JavaScript开始修改页面之前删除所有JavaScript。(我想我最终必须为PHP解析文件,但这应该不会太难)我考虑过编写一个脚本来循环所有元素,删除任何标记、onclick、onfocus、onmouseover等,但那将是一个真正的痛苦

有人知道一种更简单的方法来摆脱在iframe中运行的JavaScript吗


更新:除非我遗漏了什么,否则我认为没有办法简单地“禁用JavaScript”。如果我错了,请纠正我。但是,我想唯一的方法是从请求的页面字符串中解析出任何脚本标记和JavaScript事件(单击、鼠标悬停等)。

是的,您的更新是正确的。必须假设从用户收到的任何输入可能包含恶意元素。因此,在接受他们的输入之前,您必须在服务器上进行验证。

您可以尝试CKEditor采用的相同解决方案,其中有一个演示。
通过从RTE模式切换到view source模式,您可以输入一些JavaScript并查看结果,这将以安全编码的字符串替换JS节点。
如果您处于查看源代码模式,请输入一些JS行,如:

<script type="text/javascript">
// comment
alert('Ciao');
</script>

//评论
警惕(‘Ciao’);
返回到富文本编辑器模式时,您将看到它以这种方式呈现:

<!--{cke_protected}%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0D%0A%2F%2F%20comment%0D%0Aalert('Ciao')%3B%0D%0A%3C%2Fscript%3E-->

我认为这是最简单有效的方法之一,因为解析JS节点的RegExp并不复杂。
例如:

var pattern = /<script(\s+(\w+\s*=\s*("|').*?\3)\s*)*\s*(\/>|>.*?<\/script\s*>)/;
var match = HTMLString.match(pattern); // array containing the occurrences found

var pattern=/HTML5在iframe上引入了一个函数,如果该函数为空,将禁用JavaScript加载和执行。

您可以将内容安全策略设置为在标题中编写src“self”。CSP将阻止我们自己网站以外的任何脚本。通过这种方式,我们可以防止任何脚本更改页面中的元素


您可以从这里获得更多信息

这篇文章讨论了如何使用javascript遍历页面并逐个删除每个事件:那篇文章讨论了如何删除脚本节点,我认为这不会“取消执行加载脚本时执行的js”。我真的不明白这个问题。加载到iframe中的文件是什么?您是否允许用户在iframe中键入任何html?页面上的所有javascript都来自哪里?听起来您可以控制文件的内容“manticmoo”URL似乎不起作用,但它仍然可以通过Wayback Machine(archive.org)获得:回答您的更新:是的,服务器端验证任务是强制性的,但在客户端环境中,您可能需要解决的问题是iframe的错误行为,用户可以通过注入一些简单的JavaScript来执行允许的操作。我在这个问题上的实际经验是,一个用户在可编辑的iframe中输入了一个简单的脚本,从另一个域在另一个iframe中导入表单,从而将编辑器页面重定向到一个空白页面。虽然导入的iframe在预览中工作得很好,但在插入代码后无法访问编辑器。@William您是对的,该任务应该通过操纵属性字符串来执行,我提供了一个POC。请小心,这不会保护您免受任何XSS攻击,原因如下所述:只有这种“保护”例如,您可能容易受到javascript链接或图像“onError”中注入的脚本的攻击。虽然这是我正在寻找的解决方案,但请注意,它所做的远不止像OP所要求的那样禁用javascript。