会话管理
用户通过Web应用程序进行登录到退出这一过程中其中有一个阶段就是服务端会给登录成功的客户端生成一个SessionID,在用户登录成功与服务端的每次交互的过程中会用到SessionID,直到用户退出,服务端才会注销给用户颁发的SessionID,这个期间的整个过程就是会话管理
会话的特点
并不是只有用户登录成功的时候服务端才会颁发SessionID给客户端,而是当用户访问Web应用程序的第一次请求的时候服务端就会颁发一个SessionID用来跟踪这个匿名用户,只是这个SessionID不是认证成功的SessionID而已,直到用户通过身份验证登录成功了会再重新颁发一个认证成功的SessionID。
流程
身份认证前的SessionID --> 认证成功 --> 会话管理 --> 访问控制 --> 会话完成 Session finalization
注意:这里的访问控制是针对通过Web应用程序登录成功的用户进行访问控制,控制其哪些资源可以被访问,哪些资源不可以被访问
会话属性
会话一般是如下显示形式:
SessionID=fewfd2e432fasdf,token=dsfadsfwe324232a090
针对会话需要注意的安全问题如下:
会话ID名称和指纹
通过这个下面的网站信息就可以知道哪些会话ID名称是什么指纹,简单点说就是知道目标网站是哪种技术和编程语言
https://wiki.owasp.org/index.php/Category:OWASP_Cookies_Database
例如:PHPSESSID ,JSESSIONID 等等
会话ID长度
会话ID必须足够的长,这样可以防止暴力破解攻击,如果不足够长,势必会被攻击者通过遍历的形式猜测出整个SessionID范围并验证哪些SessionID是有效的会话,所以会话ID长度至少128 bits (16 bytes)
会话ID不可预测性
必须要保证会话ID足够的随机,不可被攻击者猜测出来,这样是防止暴力猜解会话ID,一般从攻击者的角度会使用burpsuite进行统计分析预测会话ID是否可猜解,所以为了安全必须使用良好的伪随机数进行生成不可预测的会话ID,推荐会话ID至少是64 bits
会话ID内容
会话ID的内容必须是无意义的,仅仅表示客户端的一种标识即可,不包含敏感信息,与会话ID相关的含义及业务信息或者应用逻辑需要存储在服务端。
实施会话ID管理
比如针对:Cookie,URL参数,GET请求,POST请求,HTML表单等等,这一序列客户端与服务端之间的交互的过程中,需要对这期间的会话ID进行管理,,保证其有会话过期日期和时间,要很精确的控制,如果没有很好的实施会话ID的管理,那么会因为Web访问日志,Web浏览历史记录,书签记录,Referer标头,搜索 引擎等导致会话ID泄露,常见的漏洞就有,会话操纵,会话固定攻击。
传输层会话ID安全
因为会话ID是在Cookie中,所以Web应用程序需要使用HTTPS加密进行连接,而且要使用HSTS安全性增强功能,而且Cookie需要加很多必要的标签
概括有以下安全性标签需要加:
Cookies --> Secure,HttpOnly,SameSite,Domain,Path,Expire,Max-Age,
会话ID生命周期
1.会话期限已慢,过来设定的会话期限时间
2.自动会话过期
- 空闲超时 -- 用户长时间没有操作
- 绝对超时 -- 会话有一个固定超时时间,到了这个时间,不管咋样,服务端必须强制注销会话,使会话失效,让用户重新进行身份认证获取新的会话ID
- 续约超时 -- 用户操作一段时间后,在没有到达过期时间范围内,再次申请续约超时时间
- 手动操作会话到期 -- 用户自己注销关闭会话
其他需要注意的安全问题
1.需要有登出按钮功能
2.Web内容缓存,防止泄露私密数据或敏感数据,一般是针对Cache-Control,Pragma 等HTTP标头配置
3.初始登录超时
4.Web浏览器窗口强制会话注销
5.禁用Web浏览器跨标签会话
6.自动客户端注销
网友评论