Spring Security でのロール認可の修正
Spring Security は堅牢な認可メカニズムを提供しますが、不適切な構成はセキュリティの脆弱性につながる可能性があります。この記事では、制限されたロールを持つユーザーが管理者用に予約されたリソースにアクセスできるという一般的な問題について説明します。
提供されたコード スニペットは、メモリ内認証と JDBC 認証の両方を使用して Spring Security を構成します。この問題は、username=? のユーザーからのユーザー名、パスワード、1 の選択に起因すると考えられます。
この問題は、authorizeRequests() メソッド内のマッチャーの順序に起因します。 Spring Security はマッチャーを順番に評価し、最初の一致によって認可の決定が決まります。この場合、次のマッチャー:
.anyRequest().authenticated()
がロールベースのマッチャー:
.antMatchers("/users/all").hasRole("admin")
の前に配置されます。その結果、ユーザーが認証されている限り、すべてのリクエストが承認されます。 、役割に関係なく。これを解決するには、ロールベースのマッチャーが優先されるようにマッチャーの順序を変更します。
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"); }
この修正された構成では、「user」ロールのみを持つユーザーは「/users/all」へのアクセスを拒否されます。一方、「admin」ロールを持つユーザーはアクセス権を持ちます。
Spring Security の承認を構成するときは、意図したセキュリティ ポリシーが確実に適用されるようにマッチャーの順序を覚えておくことが重要です。
以上がSpring Security のロールベースの承認が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。