SPRING.AUTHZ.MISSING

缺少授权

此检查器会验证用户是否经过授权以访问受保护的资源并报告用户未经授权而尝试访问受保护的资源的情况。

漏洞与风险

攻击者可能会通过直接修改或读取关键数据或者通过访问特权功能来获得权限。

缓解与预防

标识您的应用程序中的所有特权资产,例如显示敏感数据的网页、包含特权或管理功能的网站部分,等等。标识应用程序中的用户角色及其访问权限。始终检查用户是否应该有权访问资产。始终为项目中受保护的资源(需要授权的资源)进行适当的设置。

漏洞代码示例

Spring 提供了附带资源访问控制机制的安全组件。Spring 通过使用筛选器链来处理用户的请求。在此示例中,configure() 方法定义了不同的 URL 以及所需的访问角色。

复制
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/version ").hasAnyRole("ADMIN","USER")
           .antMatchers(HttpMethod.PUT ,"/admin/*").hasRole("ADMIN")
           .antMatchers("/setting").authenticated()
          .and().httpBasic();
     }

Klocwork 在第 9 行报告了缺陷,这表示“需要授权才能访问“setting”资源”。用户需要经过授权才能访问受保护的资源。在此示例中,用户需要经过身份验证以访问“setting”,但未获得授权。

修正代码示例

复制
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/version ").hasAnyRole("ADMIN","USER")
           .antMatchers(HttpMethod.PUT ,"/admin/*").hasRole("ADMIN")
          .antMatchers("/setting").hasAuthority("ADMIN")
          .and().httpBasic();
     }

在此修正代码示例中,Klocwork 不再报告缺陷,因为用户针对需要授权或属于受保护资源的所有 API 获得授权。

相关检查器

扩展

可调整此检查器,以检查用户是否经过授权以访问项目中使用的受保护的 API。可以通过在 .jkb 文件中使用 @CheckerParam 选项来进行此操作。有关详情,请参阅调整 Java 分析。