【问题标题】:Allow Web Page To Be Rendered Inside HTML Frame允许网页在 HTML 框架内呈现
【发布时间】:2015-03-19 11:31:26
【问题描述】:

我有两个网络应用程序:网络应用程序(web-app)和报告网络。我想在<iframe> 的网络应用程序中嵌入报告网络。所以它被浏览器拒绝并出现错误:

X 帧选项:拒绝

有什么帮助吗?

【问题讨论】:

    标签: spring-security x-frame-options clickjacking


    【解决方案1】:

    编辑 (06.2020) - X-Frame 选项已过时:

    “frame-ancestors 指令废弃了 X-Frame-Options 标头。如果资源同时具有这两种策略,则应该强制执行 frame-ancestors 策略,而应该忽略 X-Frame-Options 策略。”
    @ 987654321@

    所以考虑使用content-security-policy

    <headers>
        <content-security-policy policy-directives="frame-ancestors 'self'"/>
    </headers>
    

    如果您使用的是 Spring Security 4.x,以下配置将解决您的问题(假设 webapp 在同一服务器地址上运行)。

    XML 配置

    <http>
        <!-- ... -->
    
        <headers>
            <frame-options policy="SAMEORIGIN" />
        </headers>
    </http>
    

    Java 配置

    @EnableWebSecurity
    public class WebSecurityConfig extends
    WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
            // ...
            .headers().frameOptions().sameOrigin();
        }
    }
    

    禁用配置

    注意安全风险,您也可以禁用它。

    http.headers().frameOptions().disable();


    背景信息

    在 Spring Security 3.2.0 中,引入了安全标头,但默认禁用:
    http://spring.io/blog/2013/08/23/spring-security-3-2-0-rc1-highlights-security-headers/

    在 Spring Security 4.x 中,默认情况下启用标头(对于 IFrame:X-Frame-Options:DENY): “Spring Security 4.x 已更改 Java 配置和 XML 配置,以要求显式禁用默认值。”
    http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-header

    来源:http://docs.spring.io/autorepo/docs/spring-security/4.0.x/reference/html/headers.html#headers-frame-options

    【讨论】:

    • 没有。您的 Java 列表不会编译(即使文档说可以)。
    • 好吧,你需要删除“// ...”部分,因为这不是 java 语法,它代表 HttpSecurity http 对象的先前配置。
    • 我做了所有这些。它不起作用。这些文档是错误的,因为它们在一些关于标头的 Java 配置的地方。 @medveshonok117 有正确的答案。
    • 怎么了?你得到一个编译错误?配置configure() 没有被调用?
    • 如果您要配置多个标头选项,就会出现问题。虽然文档中给出的示例为零,但我最终还是弄明白了。在大多数情况下,您需要连续使用多个.and() 副本。
    【解决方案2】:

    你可以使用

    <headers>
      <frame-options policy="SAMEORIGIN"/>
    </headers>
    

    在您的安全应用程序上下文 XML 中的 &lt;http&gt; 配置中

    【讨论】:

      【解决方案3】:

      X-Frame-options 的值可以是 DENY(默认)、SAMEORIGIN 和 ALLOW-FROM uri。 根据 Spring Security 文档,您可以告诉 Spring 以这种方式添加自定义标头来覆盖默认行为:

      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .headers()
                  .addHeaderWriter(new XFrameOptionsHeaderWriter(new WhiteListedAllowFromStrategy(Arrays.asList("www.yourhostname.com"))))
          ...
      }
      

      并且 Spring 应附加 X-Frame-Options: ALLOW-FROM ... 或

       .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
      

      对于 X-Frame-Options: SAMEORIGIN 或使其完全禁用

      http.headers().frameOptions().disable()
      

      【讨论】:

      猜你喜欢
      • 2011-10-05
      • 1970-01-01
      • 2018-06-06
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多