Bagaimana cara menonaktifkan header respons 'X-Frame-Options' di Spring Security?


89

Saya memiliki CKeditor di jsp saya dan setiap kali saya mengunggah sesuatu, kesalahan berikut muncul:

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

Saya telah mencoba menghapus Keamanan Musim Semi dan semuanya bekerja seperti pesona. Bagaimana saya bisa menonaktifkan ini di file xml keamanan musim semi? Apa yang harus saya tulis di antara <http>tag


1
Tak satu pun dari jawaban di bawah ini membahas apakah mungkin menerapkan SAMEORIGIN atau ALLOW pada tingkat metode pengontrol - ada yang tahu?
Black

Jawaban:


111

Secara default X-Frame-Optionsdiatur ke ditolak, untuk mencegah serangan clickjacking . Untuk mengesampingkan ini, Anda dapat menambahkan berikut ini ke dalam konfigurasi keamanan pegas Anda

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

Berikut adalah opsi yang tersedia untuk kebijakan

  • TOLAK - adalah nilai default. Dengan ini, halaman tidak dapat ditampilkan dalam bingkai, terlepas dari situs yang mencoba melakukannya.
  • SAMEORIGIN - Saya menganggap ini yang Anda cari, sehingga halaman akan (dan dapat) ditampilkan dalam bingkai dengan asal yang sama seperti halaman itu sendiri
  • ALLOW-FROM - Memungkinkan Anda untuk menentukan asal, di mana halaman dapat ditampilkan dalam bingkai.

Untuk informasi lebih lanjut lihat di sini .

Dan di sini untuk memeriksa bagaimana Anda dapat mengkonfigurasi tajuk menggunakan konfigurasi XML atau Java.

Perhatikan, bahwa Anda mungkin juga perlu menentukan yang sesuai strategy, berdasarkan kebutuhan.


Apa namespace untuk ini httpdan headerstag?
Pasupathi Rajamanickam

4
Apakah mungkin untuk menerapkan ini sebagai level metode pengontrol?
mad_fox

4
Jika Anda perlu mengkonfigurasinya dalam metode konfigurasi WebSecurityConfigurerAdapter, tulis kode berikut:http.headers().frameOptions().sameOrigin();
russellhoff

@ vtor Saya menggunakan pegas 3.1 dan ini tidak didukung, ada solusi yang mungkin Anda sarankan?
Musim semi tanggal

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… ini didukung. Bisakah Anda membagikan apa yang telah Anda coba dan tidak berhasil?
vtor

103

Jika Anda menggunakan konfigurasi Java dan bukan konfigurasi XML, masukkan ini ke dalam WebSecurityConfigurerAdapter.configure(HttpSecurity http)metode Anda :

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

34
Menggunakan disable () adalah opsi tetapi jika di server yang sama, gunakanhttp.headers().frameOptions().sameOrigin();
Ian Newland

59

Kemungkinan besar Anda tidak ingin menonaktifkan Header ini sepenuhnya, tetapi gunakan SAMEORIGIN. Jika Anda menggunakan Java Configs ( Spring Boot) dan ingin mengizinkan X-Frame-Options : SAMEORIGIN, maka Anda perlu menggunakan yang berikut ini.


Untuk versi Spring Security yang lebih lama:

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

Untuk versi yang lebih baru seperti Spring Security 4.0.2 :

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

Bagaimana cara mengkonfigurasi ini di Spring 3.2.12?
Pasupathi Rajamanickam

1
Bermigrasi dari 3.X ke 4.X dan mengalami ini seperti yang baru saja ditambahkan berdasarkan contoh pertama. Terima kasih.
steve

18

Jika menggunakan konfigurasi XML Anda bisa menggunakan

<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

Jika Anda menggunakan konfigurasi Java Spring Security, semua header keamanan default ditambahkan secara default. Mereka dapat dinonaktifkan menggunakan konfigurasi Java di bawah ini:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

9

Jika Anda menggunakan Spring Boot, cara termudah untuk menonaktifkan header default Spring Security adalah dengan menggunakan security.headers.*properti. Khususnya, jika Anda ingin menonaktifkan X-Frame-Optionsheader default, cukup tambahkan berikut ini ke application.properties:

security.headers.frame=false

Ada juga security.headers.cache, security.headers.content-type, security.headers.hstsdan security.headers.xsssifat-sifat yang dapat Anda gunakan. Untuk informasi lebih lanjut, lihat SecurityProperties.


5
Di Spring Boot 2.x metode ini tidak digunakan lagi. "Konfigurasi otomatis keamanan tidak lagi dapat disesuaikan. Sediakan kacang WebSecurityConfigurer Anda sendiri sebagai gantinya."
mrkernelpanic
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.