【问题标题】:php securely retrieve session dataphp 安全地检索会话数据
【发布时间】:2012-06-25 19:19:36
【问题描述】:

我正在对密码进行哈希处理,在读取会话数据时匹配用户代理,以及安全登录用户所需的一切。我对安全检索/读取会话数据的方法感兴趣。例如,我正在使用一个从会话数据数组中获取用户 ID 的函数...

在数据库表中:

a:6:{s:9:"user_data";s:0:"";s:7:"user_id";s:1:"3";s:9:"firstname";s:4:"Tina";s:8:"lastname";s:3:"Fey";s:8:"username";s:8:"lizlemon";s:6:"status";s:1:"1";}

功能(Codeigniter):

    function get_user_id()
    {
        if (is_numeric($this->ci->session->userdata('user_id'))) 
        {
            return $this->ci->session->userdata('user_id');
        }
        else
        {
            exit();
        }
    }

我只检查 id 是否为数字。即使会话数据已安全添加到数据库,我们是否应该担心检索会话数据?

【问题讨论】:

  • 如果您在将其从数据库拉回内存后进行完整性检查,我想重新验证?似乎没有必要,但我敢肯定有人已经或可以梦想到某个角度。如果你把它放在那里,你应该可以信任它,但它在那种状态下被篡改了吗?
  • 警告:如果您正在处理像云服务器或其他东西这样的第三方服务,它在一段时间内无法控制,您应该尝试完整性检查并重新验证什么是需要信任。
  • @JaredFarrish 我没有试图篡改它。我正在尝试为其添加尽可能多的安全性,因为所有数据库交互都取决于用户 ID。

标签: php session security


【解决方案1】:

您应该从不编写自己的会话处理程序。使用sesion_start()$_SESSION[] 超级全局。这也打开了使用PHP security session features 的大门,例如cooke_secure、http_only cookies 和use_only_cookies。

session_start() 生成一个非常安全的会话 id,它是一个加密随机数。您可以将 PHP 配置为从 /dev/urandom 中提取此值,这是一个非常安全的熵池,可能是生成会话 id 的最佳方式。

【讨论】:

  • 告诉 CodeIgniter 开发人员(因为这就是 OP 使用的...)codeigniter.com/user_guide/libraries/sessions.html
  • 也许值得一提(虽然我完全同意这个答案),即使是 php 生成的会话 id 在返回 facebook 时也被泄露,使用信息收集和暴力攻击的组合;所以我会说 php 会话相对安全(该错误已通过在以后的版本中添加更多随机熵来修复)
  • @Cyber​​-Guard Enterprise 在我的帖子中我说使用 /dev/urandom 作为熵的来源,这是对 php.ini 的简单修改。
  • @poncha 它看起来像是 php 会话之上的抽象,因为它具有许多相同的功能。我可能是错的。
  • 永远不要编写自己的会话处理程序而只使用 php 会话?这是为什么 ? PHP 会话容易受到来自多个角度的攻击——感染任何网络服务器的最被利用的方法之一是删除 web shell 并获取 /tmp 文件夹的命令——这是大多数服务器保存 php 会话文件的地方。即使您更改了默认文件夹,如果您的文件系统因任何原因受到威胁,您仍然会受到类似的威胁。 PHP 会话生成逻辑并没有在晴天从天而降。您可以通过改进来创建更安全的系统。
猜你喜欢
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多