【问题标题】:Another security question about Sessions关于 Sessions 的另一个安全问题
【发布时间】:2011-09-01 10:01:17
【问题描述】:

我正在尝试制作登录系统。 我在做什么,当用户登录时,我正在制作 Session['id'] 并将用户 ID 放在那里。 我也在做所谓的盐安全的东西,没关系。

现在稍后在站点的某些部分我检查 session['id'] 转到数据库检查此类 id 是否具有高级权限并授予该用户某些功能。如果用户与登录的用户相同,我也可以检查盐,避免黑客等......

我的问题如下。如果用户创建新帐户。并使用他的帐户登录,盐系统对他来说没问题,因此他将通过该站点旅行,但他的 id 会有点低,因此他将无法获得所有功能。但!如果用户明白我正在检查他的 id 以了解他是谁,他可以在登录后以某种方式给服务器不同的 session['id'] 吗?例如等级高的用户,并获得所有奖金? .因为我做了会话

ini_set('session.use_only_cookies', true); 
session_start();

所以可能所有会话数据都将在他的计算机上,对吗? 那么有可能吗?

已解决

【问题讨论】:

    标签: php session


    【解决方案1】:

    会话 id 应该是一个完全随机的数字。

    因此,即使用户将其会话 ID 更改为另一个,他也不太可能以这种方式进入另一个有效会话。它几乎总是让他退出。

    会话背后的数据仅存储在您的服务器上。

    只有会话 ID 本身被提供给网络浏览器。

    ini_set('session.use_only_cookies', true);

    您提到的设置只是确保会话 ID 仅通过 cookie 传递,而不是作为 HTML 或 URL 的一部分。

    【讨论】:

    • 现在,您要研究的下一件事是跨站点请求伪造,这是 cookie 的缺点。如果请求导致代表用户执行操作(而不仅仅是只读访问),则不应仅依赖 cookie。
    • @Thilo:为什么您认为 CSRF 与 cookie 有任何关系(除了会话作为 预防 CSRF 的工具)? OTOH 围绕 cookie 和会话存在大量安全问题(例如劫持、固定)
    • 如果没有 cookie,会话数据必须在请求 URL 或内容中(即由攻击者捏造),这使得 CSRF 非常困难。
    • 你的意思是盐法不能保护我?我以为他会处理 CSRF
    • 可能是。我不知道“盐法”是什么。
    【解决方案2】:

    使用 $_SESSION 很好,因为其中包含实际数据的文件驻留在服务器上,而不是客户端的机器上。客户端只保留一个引用,因此 PHP 知道在服务器上的会话 cookie 中查找客户端会话数据的位置。

    【讨论】:

    • ini_set('session.use_only_cookies', true);这东西不会向用户发送会话数据?
    • 不,它只是说会话 ID 应该存储在 cookie 中(而不是作为 HTML 或 URL 的一部分)
    【解决方案3】:

    只有会话 ID(通常是 PHPSESSID)cookie 驻留在用户机器上,负责告诉服务器正在使用的会话实例。 $_SESSION 中存储的数据在服务器内部是安全的,除非您手动将它们发送到客户端,否则服务器外部的任何人都无法看到它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多