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

Bravo
sumber
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.

vtor
sumber
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();
fivedogit
sumber
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();
kamwo
sumber
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>
Matthew Kirkley
sumber
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()
      ...;
  }
}
FuSsA
sumber
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.

Ali Dehghani
sumber
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