Spring Security'de 'X-Frame-Options' yanıt başlığı nasıl devre dışı bırakılır?


91

Jsp'imde CKeditor var ve ne zaman bir şey yüklesem aşağıdaki hata çıkıyor:

 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'yi kaldırmayı denedim ve her şey bir cazibe gibi çalışıyor. Spring security xml dosyasında bunu nasıl devre dışı bırakabilirim? <http>Etiketler arasına ne yazmalıyım


1
Aşağıdaki cevapların hiçbiri kontrolör yöntemi düzeyinde SAMEORIGIN veya ALLOW uygulamasının mümkün olup olmadığını ele almıyor - kimse biliyor mu?
Black

Yanıtlar:


113

Clickjacking saldırılarını X-Frame-Optionsönlemek için varsayılan olarak reddedildi olarak ayarlanmıştır . Bunu geçersiz kılmak için, aşağıdakileri bahar güvenlik yapılandırmanıza ekleyebilirsiniz.

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

İşte politika için mevcut seçenekler

  • DENY - varsayılan bir değerdir. Bununla, site ne olursa olsun, sayfa bir çerçeve içinde görüntülenemez.
  • SAMEORIGIN - Aradığınız şeyin bu olduğunu varsayıyorum, böylece sayfa, sayfanın kendisiyle aynı başlangıç ​​noktasında bir çerçevede görüntülenecek (ve görüntülenebilecektir)
  • İZİN VER - Sayfanın çerçeve içinde görüntülenebileceği bir başlangıç ​​noktası belirlemenizi sağlar.

Daha fazla bilgi için buraya bir göz atın .

Ve XML ya da Java yapılandırmalarını kullanarak başlıkları nasıl yapılandırabileceğinizi kontrol etmek için burayı tıklayın .

strategyİhtiyaçlara göre uygun olanı da belirtmeniz gerekebileceğini unutmayın .


Bunun httpve headersetiketlerin ad alanı nedir ?
Pasupathi Rajamanickam

4
Bunu kontrolör yöntemi seviyesi olarak uygulamak mümkün müdür?
mad_fox

5
WebSecurityConfigurerAdapter yapılandırma yönteminde yapılandırmanız gerekirse, aşağıdaki kodu yazın:http.headers().frameOptions().sameOrigin();
russellhoff

@vtor Spring 3.1 kullanıyorum ve bu desteklenmiyor, önerebileceğiniz herhangi bir geçici çözüm var mı?
Bahar

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… desteklenmektedir. Lütfen denediğiniz ve işe yaramadığınızı paylaşır mısınız?
vtor

105

XML yapılandırmaları yerine Java yapılandırmaları kullanıyorsanız, bunu WebSecurityConfigurerAdapter.configure(HttpSecurity http)yönteminize ekleyin :

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

36
Disable () kullanmak bir seçenektir, ancak aynı sunucudaysa şunu kullanınhttp.headers().frameOptions().sameOrigin();
Ian Newland

60

Büyük olasılıkla bu Başlığı tamamen devre dışı bırakmak istemezsiniz, ancak kullanın SAMEORIGIN. Java Configs ( Spring Boot) kullanıyorsanız ve X-Frame-Options :'a izin vermek SAMEORIGINistiyorsanız, aşağıdakileri kullanmanız gerekir.


Daha eski Spring Security sürümleri için:

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

Spring Security 4.0.2 gibi daha yeni sürümler için :

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

Bahar 3.2.12'de bunu nasıl yapılandırabilirim?
Pasupathi Rajamanickam

1
3.X'ten 4.X'e geçiş yaptık ve ilk örneğe göre eklediği için bununla karşılaştı. Teşekkür.
steve

18

XML yapılandırması kullanıyorsanız kullanabilirsiniz

<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

Spring Security'nin Java yapılandırmasını kullanıyorsanız, tüm varsayılan güvenlik başlıkları varsayılan olarak eklenir. Aşağıdaki Java yapılandırması kullanılarak devre dışı bırakılabilirler:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

9

Spring Boot kullanıyorsanız, Spring Security varsayılan üstbilgilerini devre dışı bırakmanın en basit yolu security.headers.*özellikleri kullanmaktır . Özellikle, X-Frame-Optionsvarsayılan başlığı devre dışı bırakmak istiyorsanız, şunları eklemeniz yeterlidir application.properties:

security.headers.frame=false

Ayrıca birde şu var security.headers.cache , security.headers.content-type, security.headers.hstsve security.headers.xsskendinizin kullanabileceği özellikleri. Daha fazla bilgi için bir göz atın SecurityProperties.


5
Spring Boot 2.x'de bu yöntem kullanımdan kaldırılmıştır. "Otomatik güvenlik yapılandırması artık özelleştirilemez. Bunun yerine kendi WebSecurityConfigurer çekirdeğinizi sağlayın."
mrkernelpanic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.