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

89

У меня есть 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>тегами

Браво
источник
1
Ни один из приведенных ниже ответов еще не касается того, можно ли применить SAMEORIGIN или ALLOW на уровне метода контроллера - кто-нибудь знает?
Black

Ответы:

111

По умолчанию X-Frame-Optionsустановлено значение « Отклонено» , чтобы предотвратить атаки типа « кликджекинг» . Чтобы переопределить это, вы можете добавить в конфигурацию безопасности Spring следующее:

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

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

  • DENY - значение по умолчанию. При этом страница не может отображаться во фрейме, независимо от того, пытается ли это сделать сайт.
  • SAMEORIGIN - я предполагаю, что это то, что вы ищете, чтобы страница была (и может быть) отображена во фрейме в том же источнике, что и сама страница
  • РАЗРЕШИТЬ-ОТ - Позволяет указать исходную точку, в которой страница может отображаться во фрейме.

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

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

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

второй
источник
Какое пространство имен для этого httpи headersтегов?
Pasupathi Rajamanickam
4
Можно ли применить это как уровень метода контроллера?
mad_fox
4
Если вам нужно настроить его с помощью метода настройки WebSecurityConfigurerAdapter, напишите следующий код:http.headers().frameOptions().sameOrigin();
russellhoff
@vtor Я использую Spring 3.1, и это не поддерживается, вы можете предложить обходной путь?
Весна,
@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… поддерживается. Не могли бы вы поделиться тем, что вы пробовали и что не работает?
vtor
102

Если вы используете конфигурации Java вместо конфигураций XML, поместите это в свой WebSecurityConfigurerAdapter.configure(HttpSecurity http)метод:

http.headers().frameOptions().disable();
Fivedogit
источник
34
Можно использовать disable (), но если он находится на том же сервере, используйтеhttp.headers().frameOptions().sameOrigin();
Ян Ньюленд
59

Скорее всего, вы не хотите полностью отключать этот заголовок, а используйте 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();
Камво
источник
Как это настроить в Spring 3.2.12?
Pasupathi Rajamanickam
1
Миграция с 3.X на 4.X и столкновение с этим, поскольку оно только добавлялось на основе первого примера. Спасибо.
Стив
18

Если вы используете конфигурацию 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>
Мэтью Киркли
источник
11

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

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}
FuSsA
источник
9

Если вы используете Spring Boot, самый простой способ отключить заголовки Spring Security по умолчанию - использовать 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.

Али Дехгани
источник
5
В Spring Boot 2.x этот метод устарел. «Автоконфигурация безопасности больше не настраивается. Вместо этого используйте собственный компонент WebSecurityConfigurer».
mrkernelpanic