Подтвердить что ты не робот

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

У меня есть 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, и все работает как шарм. Как я могу отключить это в Spring файле xml безопасности? Что мне следует писать между тегами <http>

4b9b3361

Ответ 1

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

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

Ниже приведены доступные параметры политики

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

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

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

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

Ответ 2

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

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

Ответ 3

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


Для более старых Spring версий безопасности:

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

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

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

Ответ 4

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

Ответ 5

Если вы используете 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.

Ответ 6

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

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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