2015-02-21 19 views
50

Ich habe CKeditor auf meiner jsp und wenn ich etwas hochladen, wird der folgende Fehler herausspringt:Wie zum Deaktivieren der 'X-Frame-Optionen' Antwort Header in Spring Security?

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

Ich habe versucht Spring Security zu entfernen und alles funktioniert wie ein Charme. Wie kann ich dies im Frühjahr Sicherheits-XML-Datei deaktivieren? Was soll ich zwischen <http> Tags schreiben

Antwort

75

Standardmäßig X-Frame-Options ist auf verweigert, um clickjacking Angriffe zu verhindern. So überschreiben Sie diese, können Sie fügen Sie den folgenden in Ihre Federsicherheitskonfigurations

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

sind hier verfügbaren Optionen für die Politik

  • DENY - wird ein Standardwert. Damit kann die Seite nicht in einem Frame angezeigt werden, unabhängig davon, wo die Site dies versucht.
  • SAMEORIGIN - ich nehme an, das ist das, was Sie suchen, so dass die Seite sein wird (und kann) in einem Rahmen auf dem gleichen Ursprung wie die Seite selbst
  • allow-FROM angezeigt - Ermöglicht Sie legen einen Ursprung fest, an dem die Seite in einem Rahmen angezeigt werden kann.

Für weitere Informationen werfen Sie einen Blick auf here.

Und here zu überprüfen, wie Sie die Header mit XML-oder Java-Konfigurationen konfigurieren können.

Beachten Sie, dass Sie je nach Bedarf möglicherweise auch strategy angeben müssen.

+1

Vielen Dank! :) – Bravo

+0

Wie lautet der Namensraum für diese "http" - und "headers" -Tags? –

+0

3 Prost für Vtorosyan –

41

Wenn Sie Java verwenden configs statt XML configs, setzen Sie diese in Ihrem "WebSecurityConfigurerAdapter.configure (HttpSecurity http)" Methode:

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

Verwenden Sie disable() ist eine Option, aber wenn es auf dem gleichen Server ist, verwenden Sie 'http.headers(). FrameOptions(). SelfOrigin();' –

30

Höchstwahrscheinlich werden Sie nicht wollen, diesen Header vollständig deaktivieren , aber verwenden Sie SAMEORIGIN. Wenn Sie Java Configs (Spring Boot) verwenden und die X-Frame-Optionen: SAMEORIGIN zulassen möchten, müssen Sie Folgendes verwenden.


Für ältere Spring Security-Versionen:

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

Für neuere Versionen wie Spring Security 4.0.2:

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

Wie in Spring 3.2.12 zu konfigurieren? –

+1

Von 3.X auf 4.X migriert und in diese gelaufen, wie es gerade angehängt wurde, basierend auf dem ersten Beispiel. Danke. – steve

12

Wenn XML-Konfiguration verwenden, können Sie

verwenden
<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> 
+1

funktioniert wie ein Charme. nur eine Korrektur, schließendes Tag sollte auch "security: frame-options" sein. –

+0

Guter Fang. Meine Antwort wurde aktualisiert. –

3

Wenn Sie Spring Boot verwenden, können Sie die Spring Security-Standardheader am einfachsten mithilfe der Eigenschaften security.headers.* deaktivieren.Insbesondere, wenn Sie die X-Frame-Options Standard-Header deaktivieren möchten, fügen Sie einfach das folgende in der application.properties:

security.headers.frame=false 

Es gibt auch security.headers.cache ist, security.headers.content-type, security.headers.hsts und security.headers.xss Eigenschaften, die Sie verwenden können. Weitere Informationen finden Sie unter SecurityProperties.

+0

danke, es ist Arbeit! –

4

Wenn Sie die Java-Konfiguration von Spring Security verwenden, werden standardmäßig alle Standard-Sicherheitsheader hinzugefügt. Sie können mit der folgenden Java-Konfiguration deaktiviert werden:

@EnableWebSecurity 
@Configuration 
public class WebSecurityConfig extends 
    WebSecurityConfigurerAdapter { 

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