侧边栏壁纸
博主头像
背锅小王子博主等级

我从事运维工作有十年之久,主要从事云原生相关的工作,对k8s、devops、servicemesh、可观察性等较为熟悉!

  • 累计撰写 59 篇文章
  • 累计创建 64 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

cloudfront开启安全标头后,iframe如何选择性播放视频或者PDF?

背锅小王子
2023-02-10 / 0 评论 / 0 点赞 / 193 阅读 / 1,103 字
温馨提示:
本文最后更新于 2023-02-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、问题描述

目前在cloudfront的域名已经开启了 X-Frame-Options: SAMEORIGIN 安全标头,现在部分业务需要将一些视频或者pdf文件嵌入到网站中,可以直接播放或者浏览

2、安全标头

HTTP响应标头可用于指示是否应允许浏览器或站点可以使用它来避免点击劫持攻击,方法是确保它们的内容不会嵌入到其他站点中。

X-Frame-Options <frame><iframe><embed><object>

X-Frame-Options

X-Frame-Options参数:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

如果您指定DENY,不仅浏览器在从其他站点加载时尝试加载框架中的页面会失败,从同一站点加载时尝试这样做也会失败。另一方面,如果您指定SAMEORIGIN,您仍然可以在框架中使用该页面,只要将它包含在框架中的站点与为该页面提供服务的站点相同即可。

DENY:页面不能显示在框架中,无论网站试图这样做。

SAMEORIGIN:仅当所有祖先框架都与页面本身同源时,才能显示该页面。

ALLOW-FROM=url 弃用
这是一个过时的指令,不再适用于现代浏览器。(使用它会产生与省略标头相同的行为。)建议不要使用它。Content-Security-Policy HTTP 标头有一个指令frame-ancestors,您可以改用它。

Content-Security-Policy

frame-ancestors的策略可以设置一个或多个源:

Content-Security-Policy: frame-ancestors <source>;
Content-Security-Policy: frame-ancestors <space separated list of sources>;
  • 来源

    可以是以下之一:

    注意:该frame-ancestors指令的语法类似于其他指令的源列表(例如default-src),但不允许’unsafe-eval’or’unsafe-inline’例如。它也不会退回到default-src设置。仅允许以下来源:

  • <主机源>
    按名称或 IP 地址以及可选的URL方案和/或端口号的 Internet 主机,以空格分隔。该站点的地址可能包含一个可选的前导通配符(星号字符,‘‘),您可以使用通配符(再次,’’)作为端口号,表示所有合法端口都对源有效。主机周围的单引号是不允许的。例子:

    http://*.example.comhttp::匹配使用URL 方案从 example.com 的任何子域加载的所有尝试。
    mail.example.com:443: 匹配所有尝试访问 mail.example.com 上的 443 端口。
    https://store.example.com: 匹配所有使用 访问 store.example.com 的尝试https:。

    ** 警告**:如果没有为 a 指定 URL 方案host-source并且 iframe 是从httpsURL 加载的,则加载 iframe 的页面的 URL 也必须是https

  • <方案源>
    诸如http:或者方案https:。冒号是必需的,不应引用方案。您还可以指定数据方案(不推荐)。

    data:允许将data:URL用作内容源。这是不安全的;攻击者还可以注入任意data:URL。谨慎使用它,绝对不要用于脚本。
    mediastream:允许mediastream:URI用作内容源。
    blob:允许blob:URI用作内容源。
    filesystem:允许filesystem:URI用作内容源。

  • ‘self’
    指的是提供受保护文档的来源,包括相同的 URL 方案和端口号。您必须包括单引号。一些浏览器专门从源指令中排除bloband 。filesystem需要允许这些内容类型的站点可以使用数据属性指定它们。

  • ‘none’
    指空集;也就是说,没有 URL 匹配。单引号是必需的。

例子:

Content-Security-Policy: frame-ancestors 'none';

Content-Security-Policy: frame-ancestors 'self' https://www.example.org;

Content-Security-Policy: frame-ancestors 'self' https://example.org https://example.com https://store.example.com;

3、nginx配置

因为业务需要,需要对特定的域名放行,例如:www.bgxwz.comlogin.bgxw.com

location / {
    add_header Content-Security-Policy "frame-ancestors 'self' https://www.bgxwz.com https://login.bgxw.com;";
}

4、cloudfront配置

在cloudfront中添加一个新的自定义策略,如下:
image
在行为中的默认中添加刚刚添加的策略,如图:
image-1676030060496

0

评论区