网络安全防护:Session攻击
目录
2.1 Session劫持(Session Hijacking)
2.2 Session固定攻击(Session Fixation)
2.3 Session篡改(Session Manipulation)
2.4 Session重放攻击(Session Replay)
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();
//设置HttpOnly
sessionCookie.setHttpOnly(true);
//设置Secure
sessionCookie.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扫描)是维持安全的关键环节。
更多推荐
所有评论(0)