Как отключить заголовок ответа "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 ответов:
По умолчанию
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() ...; } }