Security 会话安全
我在一个公共网站上工作,该网站将使用DB支持的用户会话,并将其键入会话ID。我试图防止会话劫持和篡改;我返回给客户机的会话数据本身的价值有限,但我希望防止大规模盗窃。我在这里制定了一个小计划,但我想得到一些反馈和批评Security 会话安全,security,Security,我在一个公共网站上工作,该网站将使用DB支持的用户会话,并将其键入会话ID。我试图防止会话劫持和篡改;我返回给客户机的会话数据本身的价值有限,但我希望防止大规模盗窃。我在这里制定了一个小计划,但我想得到一些反馈和批评 当会话开始时,客户端将获得一个唯一的密钥和会话数据的散列 在每个后续请求中,客户机发送一个会话密钥+其会话数据的散列 如果修改了会话数据,则会向客户端提供反映其会话数据的新哈希值 如果对的请求包含与数据库不匹配的错误哈希,则会话将标记为已泄露。该请求和会话的所有后续请求都会导致通
- 当会话开始时,客户端将获得一个唯一的密钥和会话数据的散列
- 在每个后续请求中,客户机发送一个会话密钥+其会话数据的散列
- 如果修改了会话数据,则会向客户端提供反映其会话数据的新哈希值
- 如果对的请求包含与数据库不匹配的错误哈希,则会话将标记为已泄露。该请求和会话的所有后续请求都会导致通过复制受损会话创建新会话。新会话引用了出于安全审核目的复制它们的会话
另一个想法是跟踪引用的URL。关于恶意行为,查看某人来自何处以获得一致性可能会暴露出程序中的漏洞(如果有)。这似乎相对安全,但有几种方法可以避免:
- 如果会话密钥被盗,哈希也可能被盗。只要合法客户端不做任何事情,劫机者就可以接管并保持密钥/哈希/数据一致性。在合法客户醒来之前你什么都看不到。。。如果有的话
- 在任何情况下,如果您的散列不够神秘/安全,那么只需从数据中猜测即可(可能也可以嗅探到)。您可能应该使用某种随机salt(每个会话、每个用户、每个时间帧…)来确保这是尽可能难以猜测的
- 在登录时更改它,以避免会话固定和
- 将其锁定到IP以避免攻击者通过侧劫持进行控制
- 我不明白会话数据散列的意义是什么。它解决了什么问题
这可能会导致问题,例如,同时在两个选项卡中加载两个页面时。如果第一个请求更改了会话数据,但另一个请求已经发送,那么它的哈希值将不正确
另外,如果你复制旧的会话,我不知道你用这个实现了什么
只要有一个简单的会话id和:
为了防止攻击者看到数据,您必须使用SSL。您不能指望IP地址是唯一的或没有更改。公司防火墙通常通过NAT转换合并甚至随机更改IP地址。它可以使系统更加安全,但它会破坏试图要求相同IP地址的服务器身份验证方案
在过去的几年里,还有另一个问题——系统比过去移动得多。我经常“休眠”我的笔记本电脑,而不是将其关闭,但这意味着我来自不同的家庭、工作场所、星巴克等的IP地址。这可能会导致服务器中断,会话超时时间短至15-30分钟——我只需要从办公室到午餐等的时间。作为旁注,没有安全措施是完全严密的。。。如果系统被破坏,您只需将保护系统的努力与成本成比例。太多的安全性可能和太少的安全性一样昂贵……哈希背后的想法是检测除客户端之外的其他人对会话的篡改。通过复制(分支)会话,我允许客户端继续,即使他们的会话被劫持。(直到我读到Varkhan的评论,我才这么想。)我建议你不要去发明自己的安全机制,而是使用经过验证的机制。如您所知,散列不会增加任何值。但这会带来问题。