网络安全防护:Session攻击
目录
1、概念
2、核心Session攻击类型
2.1 Session劫持(Session Hijacking)
2.2 Session固定攻击(Session Fixation)
2.3 Session篡改(Session Manipulation)
2.4 Session重放攻击(Session Replay)
3、进阶攻击手法
3.1 跨站请求伪造(CSRF)与会话结合
3.2 子域Session继承漏洞
4、防御策略
4.1 Session ID安全
4.2 防Session固定
4.3 Session存储安全
4.4 设置合理的过期时间
4.5 对抗CSRF
4.6 Cookie作用域隔离
4.7 服务端安全加固
4.8 总结
5、监控
1、概念
Session攻击是Web安全中针对用户会话(Session)的常见攻击手段,攻击者通过窃取、伪造或操纵Session来非法获取用户权限,执行未授权操作。
当用户登录完成后,在服务器端就会创建一个新的会话(Session),会话中会保存用户的状态和相关信息。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。最常见的做法就是把SessionID加密后保存在Cookie中,因为Cookie会随着HTTP请求头发送,且受到浏览器同源策略的保护。
Cookie中保存的SessionlD,SessionID一旦在生命周期内被窃取,就等同于账户失窃。同时由于SessionID是用户登录之后才持有的认证凭证,因此黑客不需要再攻击登录过程(比如密码)。
2、核心Session攻击类型
2.1 Session劫持(Session Hijacking)
-
原理:攻击者窃取用户的Session ID(如Cookie中的
JSESSIONID
),冒充用户身份。 -
攻击方式:
-
网络嗅探:在未加密的HTTP通信中截获Session ID。
-
XSS攻击:通过注入恶意脚本
document.cookie
窃取Cookie中的Session ID。 -
中间人攻击(MITM):在公共WiFi等场景拦截数据。
-
暴力破解:尝试各种Session ID,直到破解。
-
预测:如果Session ID使用非随机的方式产生,那么就有可能计算出来。
-
保持攻击:Session没有强制过期时间,攻击者一直持有一个有效的Session(比如间隔性地刷新页面,告诉服务器这个用户仍然在活动),攻击者就能通过此有效Session一直使用用户的账户,成为一个永久的后门。
-
-
案例:攻击者通过WiFi嗅探获取用户登录Cookie,直接登录其账户。
-
攻击步骤:
1> 目标用户需要先登录站点;
2> 登录成功后,该用户会得到站点提供的一个会话标识SessionID;
3> 攻击者通过某种攻击手段捕获Session ID;
4> 攻击者通过捕获到的Session ID访问站点即可获得目标用户合法会话。
2.2 Session固定攻击(Session Fixation)
-
原理:强迫用户使用攻击者预设的Session ID。
-
攻击方式:
-
SessionID保存在URL中的情况,攻击者诱使目标用户打开这个URL。
-
-
攻击流程:
1> 攻击者生成一个Session ID(如访问site.com?SID=attacker_sid
)。
2> 诱骗用户使用此Session ID登录(如通过钓鱼链接)。
3> 用户登录后,攻击者凭相同Session ID获得权限。
-
案例:攻击者发送带固定Session ID的链接,用户登录后攻击者即可接管会话。
攻击者访问网站获取Session ID:
SID=1234abcd
。构造钓鱼链接:
https://victim-site.com/login?SID=1234abcd
。用户点击链接并登录,服务器将Session ID与账户绑定。
攻击者使用
SID=1234abcd
直接访问用户账户。
2.3 Session篡改(Session Manipulation)
-
原理:修改Session数据以提升权限或绕过验证。
-
攻击方式:
-
篡改Session中的用户角色字段(如
role=admin
)。 -
修改身份验证状态(如
is_logged_in=1
)。
-
-
案例:普通用户修改Session中的
user_role
值,越权访问管理员功能。
2.4 Session重放攻击(Session Replay)
-
原理:截获合法Session数据包并重复发送,用于绕过验证。
-
场景:在支付、密码修改等关键操作中重放请求。
3、进阶攻击手法
3.1 跨站请求伪造(CSRF)与会话结合
-
利用用户已登录的Session状态,诱骗其执行恶意操作(如转账)。
-
防御关键:CSRF Token验证。
3.2 子域Session继承漏洞
-
主域设置Cookie(
domain=.example.com
)导致子域共享Session ID。 -
风险:子域(如
blog.example.com
)被攻破后影响主站会话安全。
4、防御策略
4.1 Session ID安全
-
强随机性:使用安全的随机数生成器(如CSPRNG),长度≥128位。
-
HTTPS全程加密:防止网络嗅探,设置
Secure
标志确保仅通过HTTPS传输。(浏览器默认只要使用http请求一个站点,就会发送明文cookie)
response.setHeader("SET-HEADER","user="+request.getParameter("cookie")+";HttpOnly;Sec
ure");
-
HttpOnly属性:阻止JavaScript访问Cookie,缓解XSS攻击。
response.setHeader("SET-HEADER","user="+request.getParameter("cookie")+";HttpOnly");
@WebListener
public class SessionCookieInitialization implements ServletContextListener {private static final Log log = LogFactory.getLog(SessionCookieInitialization.class);public void contextInitialized(ServletContextEvent sce) {ServletContext servletContext = sce.getServletContext();SessionCookieConfig接口,用于操作会话Cookie,在ServletContextListener监听器初始化方法中进行设定即可SessionCookieConfig sessionCookie = servletContext.getSessionCookieConfig();//设置HttpOnlysessionCookie.setHttpOnly(true);//设置SecuresessionCookie.setSecure(true);}public void contextDestroyed(ServletContextEvent sce) {}
}
-
定期更换Session ID:用户登录后、权限变更时重新生成ID。
// 用户登录成功后重置Session ID
session_start();
if (authenticate_user()) {session_regenerate_id(true); // 删除旧Session文件$_SESSION['logged_in'] = true;
}
4.2 防Session固定
- 登录后重置Session ID:
// Java示例:用户认证成功后重置Session
request.getSession().invalidate(); // 使旧Session失效
HttpSession newSession = request.getSession(true);
-
拒绝用户携带自定义Session ID访问。
4.3 Session存储安全
-
服务端存储:避免在客户端Cookie中存储敏感数据。
-
绑定用户特征:
-
记录IP地址、User-Agent指纹,变更时要求重新认证。
-
注意:移动端IP可能频繁变化,需权衡体验与安全。
-
4.4 设置合理的过期时间
-
自动超时:非活跃会话15-30分钟后失效。
-
绝对超时:无论活动状态,最长有效期≤24小时。
# Nginx配置Session超时(示例)
proxy_read_timeout 1800s; # 30分钟无操作断开
4.5 对抗CSRF
- 关键操作添加CSRF Token:
<!-- 表单中嵌入Token -->
<input type="hidden" name="csrf_token" value="${generateCSRFToken()}">
-
验证
Referer
/Origin
头(辅助手段)。
4.6 Cookie作用域隔离
-
严格域限制:仅限当前域使用,避免
domain
过度放宽。 -
SameSite属性:
-
Strict
:完全禁止跨站携带Cookie(如银行系统)。 -
Lax
:允许安全跨站请求(如导航链接)。
-
4.7 服务端安全加固
-
禁用URL重写(如
;jsessionid=xxx
)。 -
框架安全配置(如Spring Security的Session保护机制)。
4.8 总结
措施 | 防护目标 |
---|---|
HTTPS + Secure Cookie | 防网络嗅探 |
HttpOnly + CSP | 防XSS窃取Session ID |
登录重置Session ID | 防Session固定 |
短超时 + 自动注销 | 降低会话暴露风险 |
CSRF Token | 防跨站请求伪造 |
绑定IP/User-Agent | 增加会话仿冒难度 |
5、监控
持续监测:使用WAF(如ModSecurity)监控异常Session请求,结合日志分析工具(如ELK)检测暴力破解行为。
注意:没有绝对安全的系统。定期审计代码、进行渗透测试(如Burp Suite扫描)是维持安全的关键环节。