1
ryd994 2017-02-14 22:38:54 +08:00 via Android
1.session 只有 id 在 cookie 里。确实能通过偷 cookie 的方式偷 session ,但是客户端永远看不见 session 的具体内容。而 cookiesession 是可以看见的。一般会签名,避免客户端篡改。也有加密的。但是 session 内容毕竟是存在客户端,不符合安全原则。
2. cookie session 大小有限制,而且会产生很多不必要的流量。因为浏览器每个请求都会发送所有 cookie 。 |
3
weyou 2017-02-14 22:49:28 +08:00 via Android
django 的 session id 就是一个随机 id 。防止 csrf 攻击的是另外一个叫做 csrf_token (具体什么名字有点忘了)的自定义 http header 来保证的。
|
4
murmur 2017-02-14 22:51:06 +08:00
问的好
所以有两种方法 ( 1 ) https ,这要都被偷听了要检讨你网络得多烂了 ( 2 )类似 oauth ,用户会用一个私钥 hash 所有的参数,他可以拿到 cookies 但是拿不到用户的私钥,自然也不能每次都计算出 hash |
5
z4none 2017-02-14 22:53:23 +08:00
要保证安全性,
1 是避免 cookie 被截取,设置 cookie 的 secure flag ,使其只在 HTTPS 连接中传输 2 敏感操作再次验证用户帐号密码 |
6
eric6356 2017-02-14 22:53:28 +08:00
不知道你说的 cookie 被截取具指什么。
因为 Django 的 session cookie 默认是 HTTPOnly 的,所以普通的 XSS 偷 cookie 很难奏效。 https://docs.djangoproject.com/en/1.10/ref/settings/#session-cookie-httponly |
7
sujin190 2017-02-14 22:57:52 +08:00
确实存在获得 sessionid 就能拥有登陆状态这个问题,会话劫持,但 session 里边的内容是不可能知道的,防止劫持也可以有很多方案,比如浏览器的跨域,比如 HTTPOnly 可以防止浏览器本地被修改,比如 https 可以防止传输过程中窃取,比如没过一段时间刷新成新的 id 等等
|
9
ansheng 2017-02-15 12:59:50 +08:00
1. 你确实可以通过拿到 cookieid 来获取到 sessionid
2. 就算你拿到了, session 数据存储到服务端,而且大部分都是内网的,你怎么去获取吗? |
10
AyoCross OP @ansheng 我的理解:并不是为了获取 session 里的数据,而且通过伪造身份来提高权限,比如未登录的用户伪造登录或者伪造管理员权限。来对网站做出一些损害
|