问题背景:
如图所示,两个用户,分别同时访问了一个web应用,其中A用户登录了,B用户没有登录。
问题:
总所周知,JSESSIONID是存在cookie里的,这个时候我在A用户的浏览器里把cookie中的JESSIONID复制出来,替换掉B用户浏览器的JESSIONID,这时候B用户在未登录的情况下就能完全跟A一样的操作,能被直接认证登录。
关于这种问题,请教有好的解决方案吗?
感谢大家的热心回答,有很多不错的想法和方案。其实我问的不是cookie被不被劫持的问题,而是被劫持后有没有什么好的办法。不是钱包丢不丢的问题,是钱包丢了怎么办,怎么样让钱不被别人用掉的问题。
HTTP协议是无状态,作为服务端识别用户主要依靠COOKIE中的JSESSIONID,作为秘钥,去SESSION存储中找对应该KEY的SESSION数据,所以和楼上说的一样,服务器并不认A,B,只通过JSESSIONID识别用户。
如果A的浏览器能被操作,相当于电脑已经被控制一半了...
另外为了防止XSS攻击啥的,可以设置HTTPOnly禁止JS操作COOKIE,当然此时浏览器还是可以操作COOKIE的,毕竟权限要高点嘛。
所以这种不用担心,如果还是不放心,还可以加上一个Token(例如CSRF_TOKEN)来验证,把SESSION过期时间设置短点。当然还有很多种授权方式,OAuth2,JWT等等,你也可以去试试。
有些地方可能说的不是特别准确
首先吧。我觉得要拿到这个sessionId
不是一件很简单的事情。一般来说只有能碰得到你电脑的人才拿得到吧(因为一般都会给cookie
设置httpOnly
属性),emmmmm我能打开你电脑了我应该会选择直接查看你的隐私资料啥的吧,而不是选择拿你的sessionId
。
好吧,如果我不想给你发现我在看的话,我拿了这个id,就跑了。当然也是可以的。
如果你的网站并不是特别多重要的,敏感的涉及到钱的话,其实也不用太在意这件事情。
如果涉及到钱了。那肯定就比较严谨了,会上各种安全措施。比如支付的时候会设置支付密码什么的。如果支付密码也可以泄露出去的话,那大概无解了吧....