代码之家  ›  专栏  ›  技术社区  ›  Azmisov

在iframe/div中禁用javascript

  •  20
  • Azmisov  · 技术社区  · 14 年前

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

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

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

    更新:除非我错过了什么,我相信没有办法简单地“禁用javascript”。如果我错了,请纠正我。但是,我想唯一的方法是从请求的页面字符串中解析出任何脚本标记和javascript事件(click、mouseover等)。

    4 回复  |  直到 7 年前
        1
  •  2
  •   yodabar Arkana    14 年前

    您可以尝试使用Keckeditor采用的相同解决方案,其中有一个演示 here .
    通过从RTE模式切换到查看源代码模式,您可以输入一些javascript并查看结果,这是安全编码字符串中JS节点的替换。
    如果你在 视图源 模式,通过输入一些JS行,如:

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

    当返回到 RTF编辑器 模式:

    <!--{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
    

    (当然,要替换脚本节点,应该使用replace()方法)。

    当做。

        2
  •  25
  •   Nathan Arthur user2811108    7 年前

    HTML5介绍 the sandbox attribute 在iframe上,如果为空,则禁用javascript加载和执行。

        3
  •  4
  •   Nathan Arthur user2811108    7 年前

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

        4
  •  1
  •   Senthil Vel    9 年前

    你可以设定 内容安全策略 作为 脚本src“self” 在页眉中。CSP将阻止我们自己网站以外的任何脚本。这样我们就可以防止任何脚本iframe更改页面中的元素。

    你可以从这里得到更多的信息 http://www.html5rocks.com/en/tutorials/security/content-security-policy/