内容安全政策指令:"框架 - 祖先'自我'

use*_*028 14 iframe

我在我的网页中嵌入了一个iFrame,如下所示:

var iframeProps = {
        'data-type': self.props.type,
        allowTransparency: self.props.allowTransparency,
        className: self.props.className,
        frameBorder: self.props.frameBorder,
        height: self.props.height,
        key: url,
        onLoad: self.props.onLoad.bind(self),
        scrolling: self.props.scrolling,
        src: self.state.isActive ? url : '',
        style: self.props.styles,
        width: self.props.width
    };
<iframe {...iframeProps} />
Run Code Online (Sandbox Code Playgroud)

这在控制台中引发了错误

拒绝在框架中显示" https://twitter.com/ ...."因为祖先违反了以下内容安全策略指令:"frame-ancestors'self'".

谁能告诉我怎样才能做到这一点?

小智 9

由于设置了内容安全策略,因此禁止在IFRAME中显示内容.托管twitter.com的网络服务器配置为向响应对象添加HTTP标头.具体来说,他们将Content-Security-Policy标记设置为frame-ancestors'self'.你无法使用IFRAME将他们的页面嵌入到你自己的页面中.您可以使用其他技术来解决这个问题,但没有一种技术可以像iframe标记一样简单.

W3C内容安全策略3级 - 框架祖先

  • 请问那些其他技术是什么? (14认同)
  • 这实际上并没有回答问题,而应该是一条评论。适当的答案将给出解决方案的示例。 (11认同)
  • OP 问道:“谁能告诉我如何才能完成这项工作?”。他们没有问“为什么不起作用”。他们正在寻找一些东西来让他们的项目发挥作用。任何低于此的内容都是评论。 (5认同)
  • 有什么可以做的更新吗?例如,我想显示我的另一个网站(而不是twitter.com)上的内容 (2认同)
  • @JGallardo 它确实回答了这个问题——除非 twitter.com 决定更改他们的“内容安全策略”以允许您的域,否则这是不可能的。这些控制措施旨在帮助主机(在本例中为 twitter.com)保护其资产免遭剥削和/或滥用。 (2认同)
  • @heez,不。虽然他的评论是有效的,但这不是一个实际的工作答案,因为你不能从这里获取任何内容并直接实现它。因此,无论它的准确性如何,它都是一条评论。“答案”将提供一个示例或公式来得出可行的解决方案。但作者在这里只是简单地指出:“您还可以使用其他技术。” 但没有明确说明其中任何一个。 (2认同)
  • @JGallardo我认为解释为什么OP无法做到这一点的答案也被认为是一个答案。例如,如果我说“我正在尝试这样做,但还没有弄清楚如何做”,并且如果实际上不可能这样做,那么我应该需要知道我走错了路,而事实并非如此可能的。 (2认同)