Як вимкнути заголовок відповіді "X-Frame-Options" у Spring Security?


89

У мене на 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'.

Я спробував видалити Spring Security, і все працює як шарм. Як я можу відключити це у Spring XML-файлі безпеки? Що слід писати між <http>тегами


1
Жодна з наведених відповідей поки не стосується того, чи можна застосувати SAMEORIGIN або ALLOW на рівні методу контролера - хтось знає?
Чорний

Відповіді:


110

За замовчуванням X-Frame-Optionsвстановлено значення "Заборонено", щоб запобігти атакам, що розбиваються на кліки . Щоб замінити це, ви можете додати наступне у свою настройку безпеки Spring

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

Ось доступні варіанти політики

  • DENY - значення за замовчуванням. При цьому сторінка не може відображатися у кадрі, незалежно від того, який сайт намагався це зробити.
  • ІМЕ ТАКОЕ ПОХОДЖЕННЯ - Я припускаю, що це те, що ви шукаєте, так що сторінка буде відображатися (і може бути) відображатися у кадрі з тим самим початком, що і сама сторінка
  • ALLOW-FROM - Дозволяє вказати джерело, де сторінка може відображатися у кадрі.

Для отримання додаткової інформації подивіться тут .

І тут, щоб перевірити, як ви можете налаштувати заголовки, використовуючи конфігурації XML або Java.

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


Що таке простір імен для цього httpта headersтегів?
Pasupathi Rajamanickam

4
Чи можна застосувати це як рівень методу контролера?
mad_fox

3
Якщо вам потрібно налаштувати його за допомогою методу налаштування 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();

34
Застосування disable () - варіант, але якщо він на тому самому сервері, використовуйтеhttp.headers().frameOptions().sameOrigin();
Ian Newland

59

Швидше за все, ви не хочете повністю деактивувати цей заголовок, а використовуйте SAMEORIGIN. Якщо ви використовуєте Java Configs ( Spring Boot) і хочете дозволити параметри X-Frame:, SAMEORIGINто вам потрібно буде використовувати наступне.


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

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

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

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

Як це налаштувати навесні 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 Spring, за замовчуванням додаються всі заголовки безпеки за замовчуванням. Їх можна вимкнути за допомогою наведеної нижче конфігурації Java:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.