php安全地检索会话数据

php安全地检索会话数据,php,session,security,Php,Session,Security,我正在散列密码,在读取会话数据时匹配用户代理,以及安全登录用户所需的一切。我对安全检索/读取会话数据的方法感兴趣。例如,我正在使用一个函数从会话数据数组中获取用户id 在db表中: 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";} 功能(

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

在db表中:

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";}
功能(代码点火器):


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

您应该永远不要编写自己的会话处理程序。使用
sesion\u start()
$\u会话[]
超级全局。这也为使用打开了大门,例如cooke_安全、仅http_cookies和仅使用__cookies


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

如果您在从db将其提取回内存后进行完整性检查,我想是重新验证吗?似乎没有必要,但我相信有人有或可以想出一些角度。如果你把它放在那里,你应该能够信任它,但是它在那种状态下被篡改了吗?警告:如果你正在处理一个第三方服务,比如云服务器或其他东西,它暂时不在你的控制之下,你应该试着进行完整性检查,并重新验证需要信任的内容。@JaredFarrish我没有试图篡改它。我正试图尽可能多地增加安全性,因为所有db交互都依赖于用户id。告诉CodeIgniter开发人员(因为OP就是这么用的…),也许值得一提的是(尽管我完全同意这个答案),即使是php生成的会话id在返回facebook时也遭到了破坏,结合使用信息收集和暴力攻击;所以我想说php会话相对安全(在以后的版本中添加了更多随机熵来修复这个错误)@Cyber Guard Enterprise在我的帖子中我说使用/dev/uradom作为熵的来源,这是对php.ini的简单修改。@poncha它看起来像是php会话之上的抽象,因为它有许多相同的特性。我可能错了。永远不要编写自己的会话处理程序,而只使用php会话?为什么呢?PHP会话容易受到来自多个角度的攻击—感染任何web服务器的最易被利用的方法之一是丢弃web shell并获取/tmp文件夹的命令—大多数服务器都在该文件夹中保存PHP会话文件。即使您更改了默认文件夹,如果您的文件系统由于任何原因被破坏,您仍然可能受到类似的破坏。PHP会话生成逻辑并不是在晴朗的日子里从天而降的。通过改进,您可以创建一个更安全的系统。
    function get_user_id()
    {
        if (is_numeric($this->ci->session->userdata('user_id'))) 
        {
            return $this->ci->session->userdata('user_id');
        }
        else
        {
            exit();
        }
    }