图片来源于https://blog.csdn.net/weixin_45345105/article/details/114817947
最近在给客户做通保合规时,有10多个针对会话的合规内容,客户的对接工程师不太理解。一些刚入行的测评师傅可能也有点不太理解这个概念,所以今天一起全部说一遍,估计能解决一点小小小小的问题。
这些合规内容主要为如下几条。
“当用户和业务系统的通信双方中的一方在一段时间内未作任何响应,另一方应能够自动结束会话”
“应采取会话保护措施保障软件与后台服务器之间的会话不可被窃听、篡改、伪造、重放等”
“应确保会话的安全创建。在用户认证成功后,应为用户创建新的会话并释放原有会话;创建的会话标识应满足随机性和长度要求,避免被攻击者猜测;会话与IP地址可绑定,降低会话被盗用的风险”
“应确保会话数据 的存储安全。用户登录成功后所生成的会话数据应存储在服务器端,并确保会话数据不能被非法访问;当更新会话数据时,要对数据进行严格的输入验证,避免会话数据被非法篡改”
“应确保会话数据的传输安全,防止泄露会话标识”
“在涉及到关键业务操作的Web页面,应为当前Web页面生成一次性随机令牌,作为主会话标识的补充。在执行关键业务前,应确保用户提交的一次性随机令牌与服务器端保存的一次性随机令牌匹配,以避免跨站请求伪造等攻击”
“应限制会话并发连接数,限制同一用户的会话并发连接数,避免恶意用户创建多个并发的会话来消耗系统资源,影响业务的可用性”
“应设置合理的会话超时阐值,在合理范围内尽可能减小会话超时阐值,可以降低会话被劫持和重复攻击的风险,超过会话超时闽值后立刻销毁会话,清除会话的信息”
“应确保会话的安全终止。当用户登录成功并成功创建会话后,应在Web应用系统的各个页面提供用户登出功能,登出时应及时删除服务器端的会话数据;当处于登录状态的用户直接关闭浏览器时,需要提示用户执行安全登出或者自动为用户完成登出过程,从而安全的终止本次会话”
“应禁止在COOKIE中保存明文用户密码”
这篇先说一下,什么是会话,会话的主要风险,后面再开篇一篇篇解释一下。
会话(Session)是在用户与系统进行交互的时间段内,系统用来保持用户状态和信息的一种机制。
举个例子:
场景描述
假设你正在使用一个在线购物网站。你从主页登录,浏览商品,添加商品到购物车,然后结账。
会话的详细过程
-
用户登录
请求:
你在网站上输入用户名和密码并点击“登录”。
服务器端:
服务器验证你的凭据,如果验证成功,服务器创建一个新的会话。
服务器生成一个唯一的会话ID,例如
session_id=abc123
。服务器将会话ID存储在服务器端的会话存储中(如内存、数据库)
响应:
服务器返回一个响应,将会话ID以Cookie的形式发送到浏览器。
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure
#Path=/ 表示Cookie对整个网站有效。
#HttpOnly 表示Cookie不能通过JavaScript访问,提高安全性。
#Secure 表示Cookie只通过HTTPS传输,防止被窃取。
2. 浏览商品和添加到购物车
-
请求:
-
你浏览不同的商品,选择商品并点击“添加到购物车”。
-
浏览器会在每个请求中自动包含之前收到的会话ID Cookie。
-
服务器端:
-
服务器通过会话ID查找和恢复会话数据。
-
服务器更新会话数据(例如,将选定的商品添加到购物车)。
-
响应:
-
服务器返回更新后的页面,显示购物车中的商品。
3.结账
-
请求:
-
你决定结账并点击“结账”按钮。
-
浏览器再次包含会话ID Cookie,服务器通过会话ID恢复会话数据。
-
服务器端:
-
服务器检查会话数据,处理结账请求。
-
服务器生成订单,并更新会话数据(例如,标记购物车已结账)。
-
响应:
-
服务器返回一个订单确认页面,显示订单详细信息。
4.会话结束
-
用户登出:
-
你点击“登出”按钮。
-
服务器端:
-
通过将
Expires
设置为过去的日期,Cookie 被标记为过期,从而在浏览器中删除。 -
服务器删除会话数据,并在响应中清除会话ID Cookie。
-
示例 Cookie 清除:
-
浏览器端:
-
浏览器删除相应的Cookie。
-
当用户再次访问网站时,系统会发现会话ID Cookie 不存在,因此要求用户重新登录。
Set-Cookie: session_id=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; Secure
#通过将 Expires 设置为过去的日期,Cookie 被标记为过期,从而在浏览器中删除。
看到这里,相信我们对于会话有了具象的感觉,下面再来理论一番。
会话的基本概念
-
会话开始:用户登录或访问一个系统时,会话开始。系统会生成一个唯一的会话标识符(Session ID),并将其与用户的信息相关联。
-
会话持续:在会话持续期间,用户进行的所有操作都会被系统记录,并与当前的会话标识符关联。
-
会话结束:用户退出系统或会话超时,系统会结束会话,释放相关资源,通常会删除会话标识符。
在这个过程中,会有哪些安全风险呢?
会话管理中的安全风险主要包括以下几种:
-
会话劫持(Session Hijacking):
-
攻击者通过窃取有效的会话标识符来假冒用户。这种情况可能通过中间人攻击、浏览器漏洞或不安全的网络传输等方式发生。保护措施包括使用安全的会话标识符和加密通信。
-
会话固定攻击(Session Fixation):
-
攻击者在用户登录之前,事先将一个已知的会话标识符注入用户的浏览器。用户登录后,攻击者便可以利用这个会话标识符获取用户的会话。解决办法包括在用户登录后更新会话标识符。
-
会话超时(Session Timeout):
-
如果会话超时设置不合理,可能会导致用户的会话在不活动期间仍然保持活跃,增加被攻击的风险。相反,过短的超时设置可能会影响用户体验。
-
会话重放攻击(Session Replay Attack):
-
攻击者截获并重放一个有效的会话标识符,伪装成合法用户。使用加密和过期机制可以减轻这种风险。
会话安全的最佳实践
-
使用加密传输:始终使用HTTPS协议加密会话数据,防止会话标识符在传输过程中被窃取。
-
会话标识符保护:生成复杂且随机的会话标识符,并定期更新。避免使用可预测的标识符。
-
会话超时管理:根据应用需求设定合理的会话超时时间,并在用户长时间不活动时自动注销用户。
-
会话固定防护:在用户登录后生成新的会话标识符,防止会话固定攻击。
-
用户退出:提供明确的退出选项,确保用户能够安全地结束会话,清除会话标识符。
-
监控与审计:实施日志记录和审计机制,以便检测和响应异常活动。
总之,会话的安全性对于保护用户数据和维护系统的整体安全至关重要。通过实施适当的安全措施,可以有效地减少会话相关的风险,并提升用户的安全体验。
【一些常见的快问快答】
问:结束会话和自动退出是一个意思吧?都是会话结束了。
答:不完全是。结束会话通常指用户主动结束当前的交互,如点击“注销”或关闭应用。而自动退出则是指系统在特定条件下自动终止会话,比如长时间不活动或超时。
问:我们这个是手机APP,手机就是用户自己一直在身边用的,我们不会自动结束会话的,这样对用户体验不好。
答:不管是手机APP还是Web应用,都有这个常规的安全要求(至少通保里是有要求的)。
在业务系统中,当用户或系统在一段时间内没有任何交互或响应,系统需要自动结束会话以保护安全和资源。这种机制有以下几个关键点:
-
超时机制:系统会设置一个时间限制(称为超时),如果在这个时间内没有任何操作,系统会自动结束会话。这可以防止无人使用的会话占用资源。
-
安全性:自动结束会话有助于保护敏感信息。如果用户手机未放在身边,又处于开机状态,系统可以防止未授权人员访问用户的会话内容。
-
资源管理:通过结束闲置的会话,系统可以释放资源,例如内存和处理能力,确保系统的整体性能和稳定性。
-
用户体验:有些系统会在会话即将超时前发出警告,给用户一个延续会话的机会,避免用户在会话结束时丢失未保存的工作或数据。
问:我经常看到cookie中有session ID ,这个是会话ID吗?
答:是啊,会话ID 是管理和维持用户会话状态的关键工具,确保用户体验的连贯性和系统的有效性。
哎呀,一不小心这里就写多了,后面一篇篇再写吧。后面会把前面橙色的部分都单独开列一些小篇章来写。
THE END
原文始发于微信公众号(透明魔方):什么是会话,会话应该注意哪些安全风险?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论