Как отключить заголовок ответа "X-Frame-Options" в Spring Security?


У меня есть CKeditor на моем jsp, и всякий раз, когда я загружаю что-то, появляется следующая ошибка:

 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'.

Я попробовал снять пружинную защиту, и все работает как заклинание. Как я могу отключить это в файле spring security xml? Что я должен написать между тегами <http>

6 60

6 ответов:

По умолчанию X-Frame-Options установлен в значение denied, чтобы предотвратить атакиclickjacking . Чтобы переопределить это, вы можете добавить следующее в свой spring security config

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

Здесь доступны варианты политики

  • DENY - значение по умолчанию. При этом страница не может быть отображена во фрейме, независимо от того, какой сайт пытается это сделать.
  • SAMEORIGIN - я предполагаю, что это то, что вы ищете, так что страница будет (и может быть) отображается в рамке того же происхождения, что и сама страница
  • ALLOW-FROM - позволяет указать источник, в котором страница может быть отображена во фрейме.

Для получения дополнительной информации смотрите здесь.

И здесь, чтобы проверить, как можно настроить заголовки с помощью XML или Java конфигураций.

Обратите внимание, что вам также может потребоваться указать соответствующие strategy, исходя из потребностей.

Если вы используете Java configs вместо XML configs, поместите это в свой " WebSecurityConfigurerAdapter.configure (HttpSecurity http)" метод:

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

Скорее всего, вы не хотите полностью деактивировать этот заголовок, а используете SAMEORIGIN. Если вы используете Java Configs (Spring Boot) и хотите разрешить X-Frame-Options: SAMEORIGIN, то вам нужно будет использовать следующее.


Для старых версий Spring Security:

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

Для более новых версий, таких как Spring Security 4.0.2:

http
   .headers()
      .frameOptions()
         .sameOrigin();

При использовании конфигурации 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>

Если вы используете Spring Boot, самый простой способ отключить заголовки Spring Security default-использовать свойства security.headers.*. В частности, если вы хотите отключить заголовок по умолчанию X-Frame-Options, просто добавьте в свой application.properties:

security.headers.frame=false

Есть также security.headers.cache, security.headers.content-type, security.headers.hsts и security.headers.xss свойства, которые вы можете использовать. Для получения дополнительной информации, взгляните на SecurityProperties.

Если вы используете конфигурацию Java Spring Security, все заголовки безопасности по умолчанию добавляются по умолчанию. Их можно отключить, используя конфигурацию Java ниже:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}