Jak wyłączyć nagłówek odpowiedzi „X-Frame-Options” w Spring Security?

89

Mam CKeditor na swoim jsp i za każdym razem, gdy coś przesyłam, wyskakuje następujący błąd:

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

Próbowałem usunąć Spring Security i wszystko działa jak urok. Jak mogę to wyłączyć w wiosennym pliku XML bezpieczeństwa? Co mam napisać między <http>tagami

Brawo
źródło
1
Żadna z poniższych odpowiedzi nie dotyczy jeszcze tego, czy można zastosować SAMEORIGIN lub ALLOW na poziomie metody kontrolera - ktoś wie?
Czarny

Odpowiedzi:

111

Domyślnie X-Frame-Optionsjest to zabronione, aby zapobiec atakom typu clickjacking . Aby to zmienić, możesz dodać następujące elementy do konfiguracji zabezpieczeń Spring

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

Oto dostępne opcje polityki

  • DENY - to wartość domyślna. Dzięki temu strona nie może zostać wyświetlona w ramce, niezależnie od tego, czy witryna próbuje to zrobić.
  • SAMEORIGIN - zakładam, że tego właśnie szukasz, aby strona była (i może być) wyświetlana w ramce z tego samego źródła co sama strona
  • ZEZWÓL-OD - umożliwia określenie źródła, w którym strona może być wyświetlana w ramce.

Więcej informacji znajdziesz tutaj .

A tutaj, aby sprawdzić, jak możesz skonfigurować nagłówki za pomocą konfiguracji XML lub Java.

Pamiętaj, że może być konieczne określenie odpowiedniego strategy, w zależności od potrzeb.

vtor
źródło
Jaka jest przestrzeń nazw dla tego httpi headerstagów?
Pasupathi Rajamanickam
4
Czy można to zastosować jako poziom metody kontrolera?
mad_fox,
4
Jeśli chcesz go skonfigurować w ramach metody konfiguracji WebSecurityConfigurerAdapter, napisz następujący kod:http.headers().frameOptions().sameOrigin();
russellhoff
@vtor Używam spring 3.1 i to nie jest obsługiwane, jakieś obejście, które możesz zasugerować?
Wiosna
@Spring docs.spring.io/spring-security/site/docs/current/reference/html/ ... jest obsługiwany. Czy mógłbyś podzielić się tym, co wypróbowałeś, ale nie zadziałało?
vtor
102

Jeśli używasz konfiguracji Java zamiast konfiguracji XML, umieść to w swojej WebSecurityConfigurerAdapter.configure(HttpSecurity http)metodzie:

http.headers().frameOptions().disable();
fivedogit
źródło
34
Używanie funkcji disable () jest opcją, ale jeśli jest na tym samym serwerze, użyjhttp.headers().frameOptions().sameOrigin();
Ian Newland
59

Najprawdopodobniej nie chcesz całkowicie dezaktywować tego nagłówka, ale użyj SAMEORIGIN. Jeśli korzystasz z Java Configs ( Spring Boot) i chcesz zezwolić na X-Frame-Options :, SAMEORIGINmusisz użyć poniższego.


W przypadku starszych wersji Spring Security:

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

W przypadku nowszych wersji, takich jak Spring Security 4.0.2 :

http
   .headers()
      .frameOptions()
         .sameOrigin();
kamwo
źródło
Jak to skonfigurować w Spring 3.2.12?
Pasupathi Rajamanickam
1
Migracja z 3.X do 4.X i natrafiłem na to, ponieważ było to tylko dołączanie na podstawie pierwszego przykładu. dzięki.
steve
18

Jeśli używasz konfiguracji XML, możesz użyć

<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>
Matthew Kirkley
źródło
11

Jeśli używasz konfiguracji Java Spring Security, wszystkie domyślne nagłówki zabezpieczeń są dodawane domyślnie. Można je wyłączyć za pomocą poniższej konfiguracji Java:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}
FuSsA
źródło
9

Jeśli używasz Spring Boot, najprostszym sposobem wyłączenia domyślnych nagłówków Spring Security jest użycie security.headers.*właściwości. W szczególności, jeśli chcesz wyłączyć X-Frame-Optionsdomyślny nagłówek, po prostu dodaj następujące informacje do application.properties:

security.headers.frame=false

Jest też security.headers.cache, security.headers.content-type, security.headers.hstsi security.headers.xsswłaściwości, które można wykorzystać. Aby uzyskać więcej informacji, zobacz SecurityProperties.

Ali Dehghani
źródło
5
W Spring Boot 2.x ta metoda jest przestarzała. „Automatycznej konfiguracji zabezpieczeń nie można już dostosowywać. Zamiast tego należy podać własny komponent bean WebSecurityConfigurer”.
mrkernelpanic