You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP库存管理系统线上环境新注册用户可见他人数据如何解决?

解决PHP库存管理系统跨用户数据访问问题的详细操作步骤

首先第一时间临时关闭线上注册入口,避免更多用户接触到非自有数据引发泄露风险,再按以下步骤修复:

步骤1:修正用户身份标识的存储逻辑

用户注册/登录验证通过后,必须将用户唯一ID写入服务端session,禁止把可篡改的用户ID存在前端Cookie中,Cookie仅允许存储服务端颁发的无意义SessionID:

// 注册/登录逻辑验证成功后执行
session_start();
// $user为当前注册/登录成功的用户数据表记录,取主键id存入session
$_SESSION['user_id'] = $user['id'];

步骤2:补全所有私有数据查询的用户过滤条件

所有涉及用户私有数据(库存、订单、个人信息等)的查询语句,必须强制加上user_id = 当前登录用户ID的过滤条件,禁止直接不带条件查全表:

  • 错误写法(你当前大概率是这种逻辑):
// 未加用户过滤,返回所有用户的库存数据
$sql = "SELECT * FROM inventory";
  • 正确写法:
session_start();
// 先校验登录状态,未登录直接跳转登录页
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}
// 用预处理查询加用户过滤,同时避免SQL注入风险
$stmt = $pdo->prepare("SELECT * FROM inventory WHERE user_id = ?");
$stmt->execute([$_SESSION['user_id']]);
$current_user_inventory = $stmt->fetchAll(PDO::FETCH_ASSOC);

步骤3:增加全局身份校验逻辑

抽取公共校验文件,所有需要登录才能访问的页面顶部统一引入,避免每个页面重复写校验逻辑:

// common.php 全局公共文件
session_start();
// 定义无需登录即可访问的页面白名单
$public_page = ['login.php', 'register.php'];
$current_page = basename($_SERVER['PHP_SELF']);
// 非白名单页面未登录直接跳转登录
if (!in_array($current_page, $public_page) && !isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

步骤4:本地功能验证

  • 注册2个不同的测试账号,分别为两个账号录入不同的测试数据
  • 切换登录两个账号,确认各自仪表盘只能看到自己录入的内容
  • 测试未登录状态直接访问仪表盘地址,确认会自动跳转到登录页

步骤5:线上发布验证

  • 发布前先完整备份线上现有代码和数据库,方便出错后快速回滚
  • 发布完成后先用测试账号在线上环境重复2次上述验证流程,确认没有跨用户数据问题后再开放注册入口

内容的提问来源于stack exchange,提问作者Bismark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:18:03