基于cookie存储的加密session有什么风险?

2013-12-17 14:26:38 +08:00
 kran
假设其他人得不到加密key的话.
6997 次点击
所在节点    程序员
31 条回复
qiayue
2013-12-17 14:40:19 +08:00
4KB限制
kran
2013-12-17 14:44:59 +08:00
@qiayue 如果别人能通过某种方法得到了一个管理员的所有cookie键值,那是不是全部暴露了?
一般用什么方法阻止这种伪造cookie?
kran
2013-12-17 14:46:09 +08:00
@qiayue 或者说一般用什么方法确定一个新的session(类似session_id生成)
kingwkb
2013-12-17 14:56:44 +08:00
@kran md5验证 + https = 安全
yushiro
2013-12-17 14:58:02 +08:00
基于http only的cookies是无法被js读取的,别人怎么获得? 除非电脑被黑客种了木马, 那任何方法都不能避免。
love
2013-12-17 15:08:17 +08:00
把IP也编码进去不就可以防止别人拿了管理员的cookie去别的电脑上操作。
Shieffan
2013-12-17 15:10:15 +08:00
@kran 如果cookie被劫持的话无论你是服务端存储session还是cookie存session,那还不是一样的暴露?当然除非你的session id是写在url里的token。
wodemyworld
2013-12-17 15:34:15 +08:00
安全应该走https吧
如果仅http,如果其他人得不到加密的key的话,那目标客户端是如何得到key的呢
bombless
2013-12-17 15:48:11 +08:00
很有技巧性……特别是要做到让非法状态不可表示……
kran
2013-12-17 16:18:28 +08:00
@yushiro 那就假设别人能直接监视浏览器cookie好了。。。^_^(我不太懂cookie伪造,应该有很多途径吧,毕竟是在客户端)

@love 用ip的话是个办法,但是现在移动端网络总是切来切去的,很容易让session都失效

@Shieffan 不是的,虽然对方得到session,但是因为是加密的所以得不到内容,目的是让换了终端后能识别这种“假”的cookie,然后生成全新的session

@wodemyworld 客户端不负责解析session,都在服务器端完成,只是基于cookie存储

@bombless 恩,蛮有意思的
Shieffan
2013-12-17 16:29:51 +08:00
@kran 我是觉得你这问题问的不对,什么叫“基于cookie存储的加密session”,除了直接把session id写在url里外,其它类型的session不都是基于cookie的么?
Shieffan
2013-12-17 16:42:03 +08:00
风险的话,既然是session(会话),那么它暗含的意思里就是时效短,你设置cookie里的session id的生命周期为浏览器生命周期,这样可以有效防窃取。

我觉着LZ的意思是要把session当cookie用,如果你服务端不维护一个有效session数据库,那你这session就是纯粹的cookie啊,要提高cookie的安全性,就那几种方法,http only防止被js代码获取,有效防止XSS; session id由客户端ip, 浏览器特征等客户端特征进行加密生成。

安全性跟便捷性往往就是冲突的,只能看你取舍了。
kran
2013-12-17 16:43:34 +08:00
@Shieffan 。。。咱们说的不是一回事儿,session_id一般存储在cookie或者url里,没错的。但是session的内容一般存储在服务器上,是吧?现在我希望使用cookie来存储session的内容。把加密后的session存储在cookie里,但是安全上没有保障(现在整体都基于cookie而不使用session的认证系统都不存在了吧)。

现在问题的目的是识别非法请求。
kran
2013-12-17 16:55:38 +08:00
@Shieffan 差不多了,是不想维护一个服务端的存储,但是问题的目的不是提高cookie的安全性,是提高session有效性验证的系数,sessionid由客户端生成的话,会死的很惨。
Shieffan
2013-12-17 16:57:20 +08:00
@kran 所以说你这问题就是判断session id是否非法啊,这跟你session内容怎么存一点儿关系都没啊?无论你session内容是存在服务器还是加密存在cookie里,你都是要把session id存在cookie里呀
kran
2013-12-17 17:10:21 +08:00
@Shieffan 对的对的,判断sessionid是否合法。
binux
2013-12-17 17:17:21 +08:00
@kran
假设存在中间人,http无论你加不加密,无论cookie是谁生成的,无论cookie里面存的是什么,都防止不了中间人伪造身份。

假设不存在中间人,加密足够强壮,客户端无法得到/破解出key,那么你往里面存任何东西都是安全的,不可伪造的。于是仅用cookie保存你所谓的session没有任何问题。
kran
2013-12-17 17:19:34 +08:00
@binux :D 我太喜欢你说话那个确定的劲儿了!
yushiro
2013-12-17 17:22:32 +08:00
@binux 没有中间人, 可以有XSS
dorentus
2013-12-17 17:27:56 +08:00
最大的安全隐患应该就是密钥失窃后,只要密钥不改,窃得密钥的人就可以在任意时间地点伪造或者修改 session 内容。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/93490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX