SPRING.AUTHZ.ABSENT

此检查器会验证代码是否为受保护的资源进行授权,并且会标记项目 API 配置不包括受保护的资源的实例。

漏洞与风险

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

缓解与预防

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

漏洞代码示例

复制
   @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")
            .and().httpBasic();
      }

Klocwork 在第 6 行报告了 SPRING.AUTHZ.ABSENT 缺陷,这表示“配置中缺少受保护的资源 setting”。因为“setting”API 不存在于任何 antMatchers() 中,所以用户可以在未经授权的情况下访问“setting”API。

修正代码示例

复制
  @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").hasRole("ADMIN")
          .and().httpBasic();
     }

在此修正代码示例中,Klocwork 不再报告缺陷,因为受保护的资源列表中的每个元素都存在于配置中。

相关检查器

扩展

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