【问题标题】:Keeping PHP Sessions Secure保持 PHP 会话安全
【发布时间】:2012-09-24 16:58:45
【问题描述】:

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

【问题讨论】:

  • PHP 会话会为您生成自己的 ID 和所有内容。除此之外,您无需做任何事情。如果您只是将 ID 存储在会话数据中,则没有问题。如果您要覆盖默认会话 ID,那就另当别论了……而且是个大问题。
  • 我将从与该用户关联的数据库中获取的 id 存储到会话中。所以$session['user_id']引用了从数据库中抓取的用户ID。
  • 那么,你的实现就没有问题了。
  • 非常感谢。我是否需要担心这些数据会显示在网站上,例如照片名称或网址?
  • 确保您的 PHP 服务器正在运行 Suhosin 补丁。此补丁为 PHP 添加了许多安全功能,对于任何生产 PHP 站点都应该被认为是强制性的。它所做的一件事是自动加密所有 PHP 会话数据。您的 PHP 代码不需要做任何不同的事情,但您的会话数据是安全的,不会受到服务器上的黑客攻击。 (Suhosin 还添加了一堆其他东西,都是好东西,但那是与问题相关的东西)

标签: php session security session-variables


【解决方案1】:

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

session_start();
$newsessid = somerandomnumberfunction();
session_id($newsessid);

你也可以使用 session_regenerate_id() 函数来生成一个新的 id

session_start();
session_regenerate_id();

好读

PHP Session Security

PHP Security Guide: Sessions

【讨论】:

  • 虽然这不能直接回答我的问题,从那以后它已经在 cmets 中解决了,但我会给你答案。另外,我认为我的问题有点模棱两可,所以如果你按照我认为的阅读方式阅读,你的回答就会有意义。
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2011-03-15
  • 1970-01-01
相关资源
最近更新 更多