V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wfdaj
V2EX  ›  PHP

请问,我把用户 id 保存到 session,调用时有什么安全问题吗?

  •  
  •   wfdaj · 2021-08-24 13:48:06 +08:00 · 2769 次点击
    这是一个创建于 1185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,session 里保存了 用户 id,用户名和邮箱,在显示用户信息的视图页面,经常这样调用:

    <?php if (!empty($_SESSION['userId']) && ($_SESSION['userId'] === $this->user['uid'])) { ?>
    

    这会有什么安全问题吗?

    如果有,在视图页面,我应该如何安全的读取用户信息呢?感谢!

    8 条回复    2021-08-28 19:20:27 +08:00
    Xusually
        1
    Xusually  
       2021-08-24 14:09:19 +08:00   ❤️ 1
    session 是保存在服务器端的,具体是存在磁盘上还是别的比如 memcache 之类的是看你 php 的环境配置:
    https://www.php.net/manual/zh/session.configuration.php#ini.session.save-handler

    简单来说,一般情况下,服务端会在 session 开始的时候,给客户端浏览器种一个 cookie,标记 session id,以后请求的时候,带着这个 session id 过来,服务端会把这个 session id 对应的 session 的信息都保存下来。
    本身 session 就是为了在服务端临时保存用户信息,交易信息什么的,你这么使用没什么安全问题。

    当然如果你客户端的 cookie 被偷了,那什么都不安全了。
    murmur
        2
    murmur  
       2021-08-24 15:22:58 +08:00
    没问题的,jwt 就是类似的机制,但是必须保证 uid 是加密或者可信可验证的,比如改了 uid 整个 token 解密校验不过
    murmur
        3
    murmur  
       2021-08-24 15:23:54 +08:00
    看错了,我以为是 cookies 中的 session 字符串
    wfdaj
        4
    wfdaj  
    OP
       2021-08-24 15:38:06 +08:00
    感谢 @Xusually @murmur
    kaneg
        5
    kaneg  
       2021-08-24 21:41:57 +08:00
    user id 这种不敏感的信息存在 session 是正常的做法。
    Rache1
        6
    Rache1  
       2021-08-25 09:42:02 +08:00
    后面这个 $_SESSION['userId'] === $this->user['uid'] ,你这个 $this->user 是凭空来的吗?
    fatbear
        7
    fatbear  
       2021-08-25 18:45:44 +08:00
    加密,避免通过修改 cookie 导致越权
    wfdaj
        8
    wfdaj  
    OP
       2021-08-28 19:20:27 +08:00
    @Rache1 用的框架,就是这种写法 😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1218 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.