Come disabilitare l'intestazione di risposta "X-Frame-Options" in Spring Security?


89

Ho CKeditor sul mio jsp e ogni volta che carico qualcosa, viene visualizzato il seguente errore:

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

Ho provato a rimuovere Spring Security e tutto funziona a meraviglia. Come posso disabilitarlo nel file xml di sicurezza primaverile? Cosa devo scrivere tra i <http>tag


1
Nessuna delle risposte seguenti indica ancora se è possibile applicare SAMEORIGIN o ALLOW a livello di metodo del controller: qualcuno lo sa?
Nero

Risposte:


111

Per impostazione predefinita X-Frame-Optionsè impostato su negato, per prevenire attacchi di clickjacking . Per sovrascriverlo, puoi aggiungere quanto segue nella tua configurazione di sicurezza primaverile

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

Ecco le opzioni disponibili per la politica

  • DENY - è un valore predefinito. Con questo la pagina non può essere visualizzata in un frame, indipendentemente dal sito che tenta di farlo.
  • SAMEORIGIN - Presumo che questo sia quello che stai cercando, in modo che la pagina venga (e possa essere) visualizzata in un frame sulla stessa origine della pagina stessa
  • ALLOW-FROM - Consente di specificare un'origine, in cui la pagina può essere visualizzata in una cornice.

Per maggiori informazioni dai un'occhiata qui .

E qui per verificare come configurare le intestazioni utilizzando configurazioni XML o Java.

Si noti che potrebbe essere necessario specificare anche appropriato strategy, in base alle esigenze.


Qual è lo spazio dei nomi per questo httpe i headerstag?
Pasupathi Rajamanickam

4
È possibile applicarlo come livello di metodo del controller?
mad_fox

4
Se è necessario configurarlo all'interno del metodo di configurazione di WebSecurityConfigurerAdapter, scrivere il seguente codice:http.headers().frameOptions().sameOrigin();
russellhoff

@vtor Io uso la primavera 3.1 e questo non è supportato, qualche soluzione che potresti suggerire?
Primavera

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… è supportato. Potresti condividere ciò che hai provato e non ha funzionato?
vtor

102

Se stai usando configurazioni Java invece di configurazioni XML, inserisci questo nel tuo WebSecurityConfigurerAdapter.configure(HttpSecurity http)metodo:

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

34
L'uso di disable () è un'opzione, ma se è sullo stesso server, usahttp.headers().frameOptions().sameOrigin();
Ian Newland

59

Molto probabilmente non vuoi disattivare completamente questa intestazione, ma usa SAMEORIGIN. Se stai usando Java Configs ( Spring Boot) e desideri consentire X-Frame-Options :, SAMEORIGINallora dovresti usare quanto segue.


Per le versioni precedenti di Spring Security:

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

Per le versioni più recenti come Spring Security 4.0.2 :

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

Come configurarlo nella primavera 3.2.12?
Pasupathi Rajamanickam,

1
Migrando da 3.X a 4.X e ci siamo imbattuti in questo dato che veniva aggiunto in base al primo esempio. grazie.
steve

18

Se si utilizza la configurazione XML è possibile utilizzare

<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

Se stai utilizzando la configurazione Java di Spring Security, tutte le intestazioni di sicurezza predefinite vengono aggiunte per impostazione predefinita. Possono essere disabilitati utilizzando la configurazione Java di seguito:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

9

Se stai usando Spring Boot, il modo più semplice per disabilitare le intestazioni predefinite di Spring Security è usare le security.headers.*proprietà. In particolare, se vuoi disabilitare l' X-Frame-Optionsintestazione predefinita, aggiungi semplicemente quanto segue al tuo application.properties:

security.headers.frame=false

C'è anche security.headers.cache, security.headers.content-type, security.headers.hstse security.headers.xssle proprietà che è possibile utilizzare. Per ulteriori informazioni, dai un'occhiata a SecurityProperties.


5
In Spring Boot 2.x questo metodo è deprecato. "La configurazione automatica della sicurezza non è più personalizzabile. Fornisci invece il tuo bean WebSecurityConfigurer."
mrkernelpanic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.