V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
AyoCross
V2EX  ›  Python

问一个关于 django 中 session id 的安全性问题

  •  
  •   AyoCross · 2017-02-14 22:16:46 +08:00 · 3377 次点击
    这是一个创建于 2825 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天重看 session 和 cookie 两种缓存的关系,有一个疑问: session id 既然是保存在 cookie 里,那么如果 cookie 被截取, session id 不也一起有了,那 session 还如何保证其安全性呢。

    在网上也没找到一个靠谱的答案,在 Q 群里问了下,有大神回答说是因为:是被非对称加密的,没有私钥是解不出来。。感觉听完还是云里雾里的,不是特别懂。。情人节的夜晚,有没有老司机来帮忙解答下,如果能通俗点就更好了

    谢谢
    10 条回复    2017-02-15 19:29:22 +08:00
    ryd994
        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 。
    WildCat
        2
    WildCat  
       2017-02-14 22:44:37 +08:00 via iPhone
    @ryd994 rails 的 session 默認存儲在 cookie 裏,但是有加密的
    weyou
        3
    weyou  
       2017-02-14 22:49:28 +08:00 via Android
    django 的 session id 就是一个随机 id 。防止 csrf 攻击的是另外一个叫做 csrf_token (具体什么名字有点忘了)的自定义 http header 来保证的。
    murmur
        4
    murmur  
       2017-02-14 22:51:06 +08:00
    问的好
    所以有两种方法
    ( 1 ) https ,这要都被偷听了要检讨你网络得多烂了
    ( 2 )类似 oauth ,用户会用一个私钥 hash 所有的参数,他可以拿到 cookies 但是拿不到用户的私钥,自然也不能每次都计算出 hash
    z4none
        5
    z4none  
       2017-02-14 22:53:23 +08:00
    要保证安全性,
    1 是避免 cookie 被截取,设置 cookie 的 secure flag ,使其只在 HTTPS 连接中传输
    2 敏感操作再次验证用户帐号密码
    eric6356
        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
    sujin190
        7
    sujin190  
       2017-02-14 22:57:52 +08:00
    确实存在获得 sessionid 就能拥有登陆状态这个问题,会话劫持,但 session 里边的内容是不可能知道的,防止劫持也可以有很多方案,比如浏览器的跨域,比如 HTTPOnly 可以防止浏览器本地被修改,比如 https 可以防止传输过程中窃取,比如没过一段时间刷新成新的 id 等等
    AyoCross
        8
    AyoCross  
    OP
       2017-02-14 23:19:59 +08:00
    @ryd994 谢谢,对于这个概念明朗了许多
    ansheng
        9
    ansheng  
       2017-02-15 12:59:50 +08:00
    1. 你确实可以通过拿到 cookieid 来获取到 sessionid
    2. 就算你拿到了, session 数据存储到服务端,而且大部分都是内网的,你怎么去获取吗?
    AyoCross
        10
    AyoCross  
    OP
       2017-02-15 19:29:22 +08:00
    @ansheng 我的理解:并不是为了获取 session 里的数据,而且通过伪造身份来提高权限,比如未登录的用户伪造登录或者伪造管理员权限。来对网站做出一些损害
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1952 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:29 · PVG 08:29 · LAX 16:29 · JFK 19:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.