一天,我们给客户做一些网络安全咨询,前期是排查业务系统的脆弱性,工程师抓包后,发现响应头部的Cookie长得有点不一样。大概是下面这样子吧。
Set-Cookie: user_password=MySecretPassword123; Path=/; Expires=Wed, 21 Aug 2024 07:28:00 GMT
这个图是示例哈,来自于https://github.com/macrozheng/mall-admin-web/issues/113
工程师初出茅庐,很少能挖到问题,于是有点兴奋起来,赶紧跟我讲了这个问题。
我一看,这个Cookie里面居然有用户密码,还是明文的。于是就给客户说了一下这个问题。也有点奇怪,为什么要客户要埋一个炸弹在此处,于是多嘴问了一下。
客户看我不解,说:“我们这个系统是在内网,也是很早开发的老系统了,当时对安全理解不足。不过我们后来开发的系统都是在Cookie中保存会话ID或者Token了。
不过,抛开安全的角度,将用户密码保存在Cookie中却有些好处呢。首先,我们这个系统是大家经常要访问的系统,本身也没啥敏感的信息,每个同事主要在自己电脑上打开浏览器就可以直接访问,不用再登录了。感觉用起来很节省时间。
其次,我们这个本来就是内网嘛,大家自己的电脑自己用,电脑不用也会锁屏,不太可能被攻击什么的。”
哦,我大概明白了。不过我们还是又普及了一下这样做的风险,让客户自考虑。
以下是写入报告的内容:
即使在内网环境中,将明文密码存储在Cookie中依然存在一些风险。虽然内网通常比外网更安全,但这些风险并没有消失哦。
以下是内网中存储明文密码在Cookie中的主要风险:
1. 内网安全漏洞
-
内部攻击:
-
员工或内部人员:即使在内网中,内部人员(如恶意员工或受感染的计算机)也可能访问敏感信息。如果明文密码存储在Cookie中,这些内部人员可以轻易获取用户密码。
-
设备安全:
-
不安全的终端:员工使用的终端设备可能没有得到充分保护,恶意软件或病毒可能会窃取存储在Cookie中的密码。
2. 内部网络攻击
-
网络嗅探:
-
不安全的网络环境:即使在内网中,网络嗅探工具(如Wireshark)可以用来捕获未加密的数据包。如果没有使用HTTPS,攻击者可以捕获并查看明文密码。
-
中间人攻击:
-
网络配置问题:内网中的中间人攻击仍然可能发生,尤其是在网络配置不当或存在安全漏洞时。攻击者可以劫持网络流量,窃取Cookie中的明文密码。
3. 用户操作风险
-
密码泄露:
-
共享设备:如果设备被多个用户共享,或如果设备不受严格控制,明文密码可能被其他用户访问和滥用。
-
存储和管理问题:
-
清理问题:即使是内网环境,Cookie可能在意外情况下被保留过久,旧的明文密码可能会成为潜在的安全隐患。
4. 合规性和最佳实践
-
法规和政策:
-
内网合规:即使在内网中,组织也需要遵守数据保护法规和最佳实践。明文存储密码不符合最佳安全实践,可能导致合规问题。
-
安全审计:
-
最佳实践:组织应遵循安全最佳实践,确保敏感数据(如密码)得到适当保护,无论是在内网还是外网。
推荐的安全实践
-
使用会话ID或Token:
-
替代方案:使用会话ID或Token来管理用户会话,避免将明文密码存储在Cookie中。
-
加密传输:
-
使用HTTPS:确保所有传输都通过HTTPS加密,即使是在内网中,也可以防止数据被窃取。
-
保护Cookie:
-
设置标志:设置
HttpOnly
和Secure
标志,以增强Cookie的安全性,防止JavaScript访问和非加密传输。 -
安全配置和审计:
-
设备和网络安全:定期审计内网的设备和网络配置,确保没有安全漏洞,保护敏感数据不被泄露。
尽管内网通常提供比公共网络更高的安全性,将明文密码存储在Cookie中依然存在显著的风险。这些风险包括内部人员的恶意行为、设备安全问题、网络嗅探和合规性问题。为了保障数据安全,应遵循最佳实践,如使用会话ID或Token、加密传输和适当的Cookie保护。
THE END
原文始发于微信公众号(透明魔方):为啥不能将用户密码保存在Cookie中
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论