【问题标题】:Django session id security tips?Django session id 安全提示?
【发布时间】:2022-05-04 01:21:55
【问题描述】:

我目前正在使用 Python + Django 开发一个站点并进行登录我开始使用 request.session[""] 变量为用户当前所在的会话,我最近意识到当我这样做时它会生成一个带有“sessionid”的cookie,每次用户登录时都有一个值,比如“c1cab412bc71e4xxxx1743344b3edbcc”,如果我把那个字符串粘贴到其他网络和其他计算机上的cookie中,我可以访问无需登录即可进入会话。

所以我在这里实际上要问的是,是否有人可以给我任何提示,告诉我如何在我的系统上添加一些安全性,或者我在设置会话变量时做错了什么?

谁能给我一些建议吗?

【问题讨论】:

  • 你能说一下为什么你认为这是一个安全风险吗?攻击者获取 cookie 的唯一方法是对机器进行物理访问,在这种情况下,他们不妨使用已经登录的浏览器会话。
  • 我可以通过只有这个字符串“c1cab412bc71e4xxxx1743344b3edbcc”来访问会话,我不知道这个字符串是否可以由某人生成或者这个字符串实际包含什么,如果可以的话被颠倒什么的
  • 我在这里找到了一些很好的提示:security.stackexchange.com/questions/8964/…
  • 您想象的哪些场景可能会危及用户的安全?

标签: python django cookies


【解决方案1】:

遗憾的是,据我所知,没有最好的方法可以防止这种情况发生,但您可以向帐户所有者发送电子邮件并设置某种类型的 2fa。

【讨论】:

    【解决方案2】:

    有几件事可以帮助提高会话 cookie 的安全性。

    • 您可以在用户关闭浏览器时强制会话过期。

    在您的settings.py 文件中添加:

    SESSION_EXPIRE_AT_BROWSER_CLOSE=True
    
    • 您可以手动设置会话到期前的秒数

    使用任何视图的第一个参数(request):

    request.session.set_expiry(value) # number of seconds or timedelta object
    

    为了解决您的具体问题,请考虑您所描述的实际上是会话安全 cookie 的主要功能之一。它们是便利工具,使用户能够使用网站的安全部分,而无需对每个页面请求重新进行身份验证。甚至它的跨浏览器方面也是一项功能,因为许多应用程序和浏览器都提供同步功能,允许您与您的移动设备和其他设备以及其他网络浏览器共享 cookie 和会话数据。

    如果您仍然觉得这存在太大的安全风险,那么最安全的方法可能是删除 SessionMiddleware 来自MIDDLEWAREdjango.contrib.sessions 都在你的settings.py

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2014-01-22
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2011-10-24
      相关资源
      最近更新 更多