Membetulkan Keizinan Peranan dalam Keselamatan Musim Bunga
Keselamatan Musim Bunga menawarkan mekanisme kebenaran yang mantap, tetapi konfigurasi yang salah boleh membawa kepada kerentanan keselamatan. Artikel ini menangani isu biasa di mana pengguna yang mempunyai peranan terhad boleh mengakses sumber yang dikhaskan untuk pentadbir.
Coretan kod yang disediakan mengkonfigurasi Spring Security menggunakan kedua-dua pengesahan dalam memori dan pengesahan JDBC. Walaupun isu itu dikaitkan dengan nama pengguna pilih, kata laluan, 1 daripada pengguna where username=? pertanyaan, punca sebenar terletak di tempat lain.
Masalahnya berpunca daripada susunan pemadan dalam kaedah authorizeRequests(). Spring Security menilai pemadan mengikut urutan, dan padanan pertama menentukan keputusan kebenaran. Dalam kes ini, pemadanan berikut:
.anyRequest().authenticated()
diletakkan sebelum pemadanan berasaskan peranan:
.antMatchers("/users/all").hasRole("admin")
Akibatnya, semua permintaan dibenarkan selagi pengguna disahkan , tanpa mengira peranan mereka. Untuk menyelesaikan masalah ini, susun semula pemadan supaya pemadan berasaskan peranan diutamakan:
protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .httpBasic() .and() .authorizeRequests() .antMatchers("/users/all").hasRole("admin") .anyRequest().authenticated() .and() .formLogin() .and() .exceptionHandling().accessDeniedPage("/403"); }
Dengan konfigurasi yang disemak ini, pengguna yang hanya mempunyai peranan "pengguna" akan dinafikan akses kepada "/users/all" manakala pengguna dengan peranan "pentadbir" akan mempunyai akses.
Adalah penting untuk mengingati susunan pemadan apabila mengkonfigurasi kebenaran Spring Security untuk memastikan bahawa yang dimaksudkan dasar keselamatan dikuatkuasakan.
Atas ialah kandungan terperinci Mengapakah Keizinan Berasaskan Peranan Keselamatan Musim Bunga Saya Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!