Wie deaktiviere ich den Antwortheader 'X-Frame-Options' in Spring Security?

87

Ich habe CKeditor auf meinem JSP und wenn ich etwas hochlade, erscheint der folgende Fehler:

 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 Zauber. Wie kann ich diese XML-Sicherheitsdatei im Frühjahr deaktivieren? Was soll ich zwischen <http>Tags schreiben?

Bravo
quelle
In keiner der folgenden Antworten wird noch angesprochen, ob es möglich ist, SAMEORIGIN oder ALLOW auf der Ebene der Controller-Methode anzuwenden - weiß jemand Bescheid?
Schwarz

Antworten:

110

Standardmäßig X-Frame-Optionsist dies abgelehnt, um Clickjacking- Angriffe zu verhindern . Um dies zu überschreiben, können Sie Ihrer Spring Security-Konfiguration Folgendes hinzufügen

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

Hier sind Optionen für Richtlinien verfügbar

  • VERWEIGERN - ist ein Standardwert. Damit kann die Seite nicht in einem Frame angezeigt werden, unabhängig davon, welche Site dies versucht.
  • SAMEORIGIN - Ich gehe davon aus, dass dies das ist, wonach Sie suchen, damit die Seite in einem Rahmen am selben Ursprung wie die Seite selbst angezeigt wird (und angezeigt werden kann)
  • ALLOW-FROM - Ermöglicht die Angabe eines Ursprungs, an dem die Seite in einem Frame angezeigt werden kann.

Weitere Informationen finden Sie hier .

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

Beachten Sie, dass Sie möglicherweise auch je nach Bedarf geeignete Angaben machen strategymüssen.

vtor
quelle
Was ist der Namespace für dieses httpund headersTags?
Pasupathi Rajamanickam
3
Ist es möglich, dies als Controller-Methodenebene anzuwenden?
mad_fox
3
Wenn Sie es innerhalb der Konfigurationsmethode von WebSecurityConfigurerAdapter konfigurieren müssen, schreiben Sie den folgenden Code:http.headers().frameOptions().sameOrigin();
russellhoff
@vtor Ich verwende Spring 3.1 und dies wird nicht unterstützt. Gibt es eine Problemumgehung, die Sie vorschlagen könnten?
Frühling
@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… wird unterstützt. Könnten Sie bitte mitteilen, was Sie versucht haben und was nicht funktioniert hat?
Vtor
98

Wenn Sie Java-Konfigurationen anstelle von XML-Konfigurationen verwenden, fügen Sie dies in Ihre WebSecurityConfigurerAdapter.configure(HttpSecurity http)Methode ein:

http.headers().frameOptions().disable();
fivedogit
quelle
32
Die Verwendung von disable () ist eine Option, aber wenn es sich auf demselben Server befindet, verwenden Siehttp.headers().frameOptions().sameOrigin();
Ian Newland
56

Höchstwahrscheinlich möchten Sie diesen Header nicht vollständig deaktivieren, sondern verwenden SAMEORIGIN. Wenn Sie Java Configs ( Spring Boot) verwenden und die X-Frame-Optionen zulassen möchten : SAMEORIGIN, 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();
Kamwo
quelle
Wie konfiguriere ich das in Spring 3.2.12?
Pasupathi Rajamanickam
1
Bei der Migration von 3.X auf 4.X wurde darauf gestoßen, da es nur anhand des ersten Beispiels angehängt wurde. Vielen Dank.
Steve
17

Wenn Sie eine XML-Konfiguration verwenden, können Sie diese 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>
Matthew Kirkley
quelle
11

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

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

Wenn Sie Spring Boot verwenden, können Sie die Spring Security-Standardheader am einfachsten deaktivieren, indem Sie security.headers.*Eigenschaften verwenden. Wenn Sie den X-Frame-OptionsStandardheader deaktivieren möchten , fügen Sie einfach Folgendes hinzu application.properties:

security.headers.frame=false

Es gibt auch security.headers.cache, security.headers.content-type, security.headers.hstsund security.headers.xssEigenschaften , die Sie verwenden können. Weitere Informationen finden Sie unter SecurityProperties.

Ali Dehghani
quelle
5
In Spring Boot 2.x ist diese Methode veraltet. "Die automatische Sicherheitskonfiguration kann nicht mehr angepasst werden. Stellen Sie stattdessen Ihre eigene WebSecurityConfigurer-Bean bereit."
mrkernelpanic