SV.SPRING.FIXATION

已禁用会话固定保护

默认情况下,始终启用会话固定保护。当禁用会话固定保护时,Klocwork 会报告 SV.SPRING.FIXATION 缺陷。

漏洞与风险

为帮助防止攻击者使用会话 ID 劫持有效的用户会话,建议代码在每次创建会话时都创建一个新的会话 ID。

会话固定保护默认为启用,但可以通过设置 sessionFixation().none() 来禁用。

缓解与预防

每次创建新会话时都创建一个新的会话 ID。如果需要上一个会话中的数据,可以选择迁移会话。

漏洞代码示例

复制
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
public class SpringFixation extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.sessionManagement().sessionFixation().none();
    }
}

Klocwork 在第 8 行报告了 SV.SPRING.FIXATION 缺陷,指出“使用 sessionFixation().none() 可以禁用会话固定保护,此保护默认为启用”。禁用会话固定会损害安全性。

修正代码示例 1

复制
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
public class SpringFixation extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.sessionManagement().sessionFixation().newSession();
    }
}

Klocwork 不再报告 SV.SPRING.FIXATION 缺陷,因为创建了新的会话。

修正代码示例 2

复制
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
public class SpringFixation extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.sessionManagement().sessionFixation().migrateSession();
    }
}

Klocwork 不再报告 SV.SPRING.FIXATION 缺陷,因为创建了新的会话,且旧会话中的所有数据都复制到新会话中。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。