参考答案
防御会话固定攻击的方法
这个问题的根源在 sessionid 不变,如果用户在未登录时拿到的是一个 sessionid,登录之后服务端给用户重新换一个 sessionid,就可以防止会话固定攻击了。
如果使用了 Spring Security ,那么就不用担心这个问题,因为Spring Security 中默认已经做了防御工作。
Spring Security 中的防御主要体现在三个方面:
- StrictHttpFirewall,请求地址中有
;
请求会被直接拒绝。 - 响应的 Set-Cookie 字段中有 HttpOnly 属性,这种方式避免了通过 XSS 攻击来获取 Cookie 中的会话信息进而达成会话固定攻击。
- 让 sessionid 变一下,既然问题是由于 sessionid 不变导致的,那就让 sessionid 变一下。
具体配置如下:
可见,这里有四个选项:
- migrateSession 表示在登录成功之后,创建一个新的会话,然后讲旧的 session 中的信息复制到新的 session 中,默认即此。
- none 表示不做任何事情,继续使用旧的 session。
- changeSessionId 表示 session 不变,但是会修改 sessionid,这实际上用到了 Servlet 容器提供的防御会话固定攻击。
- newSession 表示登录后创建一个新的 session。
默认的 migrateSession ,在用户匿名访问的时候是一个 sessionid,当用户成功登录之后,又是另外一个 sessionid,这样就可以有效避免会话固定攻击。
这三种方案,都可以有效避免会话固定攻击。
以上,是 网络安全面试题【怎么防御会话固定攻击】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—