保持PHP会话的安全

保持PHP会话的安全,php,session,security,session-variables,Php,Session,Security,Session Variables,当用户创建帐户时,会从数据库中为其提供一个唯一且自动递增的用户id。因此,第一个用户的用户id为1,创建的第二个用户的用户id为2,依此类推。我使用PHP会话在用户登录时存储用户id,以便他们保持登录状态。在阅读了几篇文章之后,我明白了一点,那就是你永远不希望PHP会话像我所说的那样容易受到攻击(黑客很容易确定每个用户的php会话用户id是什么。因此我的问题是,如果我使用md5或blowfish基于其唯一用户名为每个用户生成用户id,这会使php会话安全吗?一个好的方法总是在登录屏幕上显示并立即

当用户创建帐户时,会从数据库中为其提供一个唯一且自动递增的用户id。因此,第一个用户的用户id为1,创建的第二个用户的用户id为2,依此类推。我使用PHP会话在用户登录时存储用户id,以便他们保持登录状态。在阅读了几篇文章之后,我明白了一点,那就是你永远不希望PHP会话像我所说的那样容易受到攻击(黑客很容易确定每个用户的php会话用户id是什么。因此我的问题是,如果我使用md5或blowfish基于其唯一用户名为每个用户生成用户id,这会使php会话安全吗?

一个好的方法总是在登录屏幕上显示并立即发布登录以强制新会话使用随机数生成的id

session_start();
$newsessid = somerandomnumberfunction();
session_id($newsessid);
您还可以使用session_regenate_id()函数生成新id

session_start();
session_regenerate_id();
读得好


PHP会话为您生成自己的ID和所有内容。除此之外,您无需执行任何操作。如果您只是将ID存储在会话数据中,则没有问题。如果您覆盖默认会话ID,则情况不同……这是一个巨大的问题。我正在存储从与该会话相关联的数据库中获取的IDser进入会话。因此
$session['user\u id']
引用了从数据库中获取的用户id。然后,您的实现就没有问题了。非常感谢。我是否需要担心这些数据会显示在网站上,例如照片名称或url中?确保您的PHP服务器正在运行Suhosin补丁。此补丁为PHP添加了许多安全功能,并且ld对于任何生产PHP站点都是强制性的。它所做的一件事是自动加密所有PHP会话数据。您的PHP代码不需要做任何不同的事情,但是您的会话数据是安全的,不会受到服务器上的黑客攻击。(Suhosin还添加了一些其他东西,都是好东西,但这与问题相关)虽然这并不能直接回答我的问题,而且从那以后,它已经在评论中得到了解决,但我相信你的回答是正确的。另外,我认为我的问题有点含糊不清,所以如果你按照我认为的方式来读,你的回答是有意义的。