首页 > 解决方案 > 阻止具有来源的框架访问 wordpress 中的跨域框架

问题描述

我在一个网站上工作,假设网站名称是“ https://website(基于 wordpress 构建),我在控制台上收到以下错误:

Uncaught DOMException: Blocked a frame with origin "https://website" from accessing a cross-origin frame.

    at contents (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:2:26921)

    at Function.map (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:2:3613)

    at a.fn.init.n.fn.(anonymous function) [as contents] (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:2:27001)

    at b (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=postbox,thickbox,hoverIntent,common,admin-bar,wp-a11y,updates,plugin-install,svg-painter,heartbeat,wp-auth-check,shortcode,wp-ba&load%5B%5D=ckbone,media-models,wp-plupload,wp-mediaelement,wp-api-request,media-views,media-editor,media-audiovideo,mce-view,imgareaselect,&load%5B%5D=image-edit&ver=4.9.8:347:103)

    at HTMLBodyElement.<anonymous> (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=postbox,thickbox,hoverIntent,common,admin-bar,wp-a11y,updates,plugin-install,svg-painter,heartbeat,wp-auth-check,shortcode,wp-ba&load%5B%5D=ckbone,media-models,wp-plupload,wp-mediaelement,wp-api-request,media-views,media-editor,media-audiovideo,mce-view,imgareaselect,&load%5B%5D=image-edit&ver=4.9.8:347:1306)

    at HTMLBodyElement.dispatch (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:3:12444)

    at HTMLBodyElement.r.handle (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:3:9173)

    at Object.trigger (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:3:11573)

    at Object.a.event.trigger (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:9:8275)

    at HTMLDivElement.<anonymous> (https://website/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,utils,underscore,wp-util,backbone,&load%5B%5D=moxiejs,plupload&ver=4.9.8:3:18991)

上面的错误是点击View Detailswordpress插件部分产生的(如下图):

在此处输入图像描述

这个错误似乎存在于每个 wordpress 插件中,但是当我在新选项卡中打开时它有效,但当我在同一个窗口中打开时它不起作用。


问题陈述:

我想知道我需要在 wordpress 中修改哪个文件才能解决此错误。这个错误似乎存在于每个 wordpress 插件中。如前所述,它可以在新选项卡中使用,但无法在同一页面中使用

我有一种感觉,我必须通过查看上面的错误(load-scripts.php,因为该文件中生成错误)对以下文件进行一些更改,但不确定我需要添加哪一行才能使其工作.

https://website/wp-admin/load-scripts.php

标签: phpwordpresssame-origin-policy

解决方案


您的 WordPress 管理界面发生了一些不好的事情。

首先要注意的是,您描述的错误是一个众所周知的问题,您可能已经注意到:SecurityError: Blocked a frame with origin from access a cross-origin frame

看看那里的第一个答案:

您无法使用 JavaScript 访问具有不同来源的内容,如果您能做到,那将是一个巨大的安全漏洞。对于同源策略,浏览器会阻止脚本尝试访问具有不同源的框架。

如果您想访问一个框架,协议、主机名和端口必须与您的域相同。

要注意的第二件事是 WordPress 管理界面中的“查看详细信息”按钮的作用:它打开一个包含 iframe 的厚框,该 iframe 经常在 IFrame 中显示远程内容。此处详细描述了其工作原理:https ://codex.wordpress.org/Javascript_Reference/ThickBox

load-scripts.php是一个重要的 WordPress 核心文件,加载在 admin 中,用于加载 JavaScript 文件,而无需嵌入每个文件。这些 JavaScript 文件通常通过admin_enqueue_scripts()函数 ( https://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts ) 添加到您的 WordPress 管理员中。

由于您的问题很少见,并且插件的“查看详细信息”按钮几乎每次都有效,只有两种可能性:

1.“查看详细信息”IFrame 通常从您的 WordPress 所在的同一位置加载 - 因此您可能会遇到浏览器想要从不同主机加载它的问题

如果您在 WordPress 安装中存在一些错误配置,并且Thickbox 尝试从浏览器认为是另一台主机的主机获取 IFrame,则会发生这种情况。正确配置 WordPress。

2. 您有一个编程错误的插件或主题,它正在注入导致此问题的脚本

解决方案:将您的主题和所有插件一一停用,看看错误是否仍然存在。通过这种方式,您可以找出导致问题的修改,然后向插件开发人员提出错误请求。

几乎 100% 确定是单个插件、主题或错误配置导致了此问题。


推荐阅读