如何在Spring Security中禁用"X-Frame-Options"响应头?

Bra*_*avo 79 java spring spring-security x-frame-options spring-boot

我在我的jsp上有CKeditor,每当我上传一些东西时,会弹出以下错误:

 Refused to display 'http://localhost:8080/xxx/xxx/upload-image?CKEditor=text&CKEditorFuncNum=1&langCode=ru' in a frame because it set 'X-Frame-Options' to 'DENY'.
Run Code Online (Sandbox Code Playgroud)

我试过删除Spring Security,一切都像魅力一样.如何在spring security xml文件中禁用它?我应该在<http>标签之间写什么

vto*_*tor 104

默认X-Frame-Options设置为拒绝,以防止点击劫持攻击.要覆盖它,可以将以下内容添加到spring security配置中

<http>    
    <headers>
        <frame-options policy="SAMEORIGIN"/>
    </headers>
</http>
Run Code Online (Sandbox Code Playgroud)

以下是可用的政策选项

  • DENY - 是默认值.使用此页面无论站点是否尝试这样做,页面都无法显示在框架中.
  • SAMEORIGIN - 我认为这是你正在寻找的,所以页面将(并且可以)显示在与页面本身相同的原点的框架中
  • ALLOW-FROM - 允许您指定原点,页面可以在框架中显示.

有关更多信息,请查看此处.

在这里检查如何使用XML或Java的CONFIGS配置的标头.

请注意,您可能还需要strategy根据需要指定适当的值.

  • @Pasupathi名称空间是http://www.springframework.org/schema/security (2认同)
  • 可以将此作为控制器方法级别吗? (2认同)
  • 如果需要在WebSecurityConfigurerAdapter的configure方法中进行配置,请编写以下代码:`http.headers().frameOptions().sameOrigin();` (2认同)

fiv*_*git 79

如果您使用的是Java配置而不是XML配置,请将其放在"WebSecurityConfigurerAdapter.configure(HttpSecurity http)"方法中:

http.headers().frameOptions().disable();
Run Code Online (Sandbox Code Playgroud)

  • 使用disable()是一个选项,但如果它在同一台服务器上,请使用`http.headers().frameOptions().sameOrigin();` (25认同)

kam*_*mwo 50

您很可能不想完全停用此标头,但请使用SAMEORIGIN.如果您正在使用Java Configs(Spring Boot)并希望允许X-Frame-Options :,SAMEORIGIN那么您需要使用以下内容.


对于较旧的Spring Security版本:

http
   .headers()
       .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
Run Code Online (Sandbox Code Playgroud)

对于像Spring Security 4.0.2这样的新版本:

http
   .headers()
      .frameOptions()
         .sameOrigin();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。http.headers().frameOptions().sameorigin(); 为我工作。 (2认同)

Mat*_*ley 16

如果使用XML配置,您可以使用

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:security="http://www.springframework.org/schema/security"> 
<security:http>
    <security:headers>
         <security:frame-options disabled="true"></security:frame-options>
    </security:headers>
</security:http>
</beans>
Run Code Online (Sandbox Code Playgroud)


Ali*_*ani 9

如果您使用的是Spring Boot,则禁用Spring Security默认标头的最简单方法是使用security.headers.*属性.特别是,如果要禁用X-Frame-Options默认标头,只需将以下内容添加到application.properties:

security.headers.frame=false
Run Code Online (Sandbox Code Playgroud)

还有security.headers.cache,security.headers.content-type,security.headers.hsts并且security.headers.xss可以使用属性.有关更多信息,请查看SecurityProperties.

  • 在Spring Boot 2.x中,不赞成使用此方法。“安全性自动配置不再可自定义。请提供您自己的WebSecurityConfigurer bean。” (2认同)

FuS*_*SsA 8

如果您使用的是Spring Security的Java配置,则默认情况下会添加所有默认安全标头.可以使用以下Java配置禁用它们:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}
Run Code Online (Sandbox Code Playgroud)