我在我的HTML页面中加载一个<iframe>,并试图使用JavaScript访问其中的元素,但当我尝试执行我的代码时,我得到以下错误:

阻止原点为“http://www.example.com”的帧访问跨原点帧。

如何访问框架中的元素?

我正在使用这段代码进行测试,但徒劳:

$(document).ready(function() {
    var iframeWindow = document.getElementById("my-iframe-id").contentWindow;

    iframeWindow.addEventListener("load", function() {
        var doc = iframe.contentDocument || iframe.contentWindow.document;
        var target = doc.getElementById("my-target-id");

        target.innerHTML = "Found it!";
    });
});

当前回答

我想添加特定于Java Spring的配置,可以对此产生影响。

在Web站点或网关应用程序中有一个contentSecurityPolicy设置

在Spring中,你可以找到WebSecurityConfigurerAdapter子类的实现

contentSecurityPolicy("
script-src 'self' [URLDomain]/scripts ; 
style-src 'self' [URLDomain]/styles;
frame-src 'self' [URLDomain]/frameUrl...

...

.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)

如果您没有在这里定义安全的外部内容,浏览器将被阻塞。

其他回答

如果你可以控制iframe的内容——也就是说,如果它只是在一个跨起源的设置中加载,比如在Amazon Mechanical Turk上——你可以用<body onload='my_func(my_arg)'>属性来规避这个问题。

例如,对于内部html,使用this html参数(yes -这是定义的,它引用内部主体元素的父窗口):

<身体onload = ' changeForm(这)>

在内部html:

    function changeForm(window) {
        console.log('inner window loaded: do whatever you want with the inner html');
        window.document.getElementById('mturk_form').style.display = 'none';
    </script>

打开开始菜单 输入windows+R或打开“运行” 执行如下命令。

Chrome .exe——user-data-dir="C://Chrome dev session"——disable-web-security .exe

检查域的web服务器的X-Frame-Options的http://www.example.com配置 这是一个安全功能,旨在防止点击劫持攻击,

点击劫持是如何工作的?

邪恶页面看起来和受害者页面一模一样。 然后它诱使用户输入用户名和密码。

从技术上讲,邪恶有一个iframe的源受害者页面。

<html>
    <iframe src='victim-domain.example'/>
    <input id="username" type="text" style="display: none;"/>
    <input id="password" type="text" style="display: none;"/>
    <script>
        //some JS code that click jacking the user username and input from inside the iframe...
    <script/>
<html>

安全特性是如何工作的

如果你想阻止web服务器请求在iframe中呈现,添加x-frame-选项

X-Frame-Options否认

选项是:

只允许我自己的域渲染我的HTML在一个iframe。 DENY:不允许我的HTML在任何iframe内渲染 allow - from https://example.com/:允许特定的域在iframe内渲染我的HTML

这是IIS配置示例:

   <httpProtocol>
       <customHeaders>
           <add name="X-Frame-Options" value="SAMEORIGIN" />
       </customHeaders>
   </httpProtocol>

问题的解决方案

如果web服务器激活了安全特性,可能会导致客户端SecurityError错误。

当我试图嵌入一个iframe,然后用Brave打开网站时,我遇到了这个错误。当我把这个网站改为“盾牌下降”时,这个错误就消失了。显然,这并不是一个完整的解决方案,因为任何使用Brave访问网站的人都会遇到同样的问题。要真正解决这个问题,我需要做本页上列出的其他事情之一。但至少我现在知道问题出在哪里了。

我想添加特定于Java Spring的配置,可以对此产生影响。

在Web站点或网关应用程序中有一个contentSecurityPolicy设置

在Spring中,你可以找到WebSecurityConfigurerAdapter子类的实现

contentSecurityPolicy("
script-src 'self' [URLDomain]/scripts ; 
style-src 'self' [URLDomain]/styles;
frame-src 'self' [URLDomain]/frameUrl...

...

.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)

如果您没有在这里定义安全的外部内容,浏览器将被阻塞。