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 缺陷,因为创建了新的会话,且旧会话中的所有数据都复制到新会话中。