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

如何防止用户通过URL篡改ID越权编辑休假类型与直接访问页面?

解决越权编辑休假记录的方案

你之前添加的脚本仅用于防止直接通过URL访问文件本身,并未针对用户权限与休假记录归属做校验,所以无法阻止越权操作。要解决这个问题,核心是在edit_leave.php中验证当前登录用户是否有权限编辑指定ID的休假记录,具体实现步骤如下:

1. 确保用户已登录并获取当前用户标识

先通过会话确认用户处于登录状态,若未登录则跳转至登录页面:

session_start();
// 根据你的登录逻辑调整判断条件
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit();
}
$current_user_id = $_SESSION['user_id'];

2. 校验URL中休假ID的合法性

获取并过滤URL里的edit参数(注意你原链接写的是delete=id,大概率是笔误,正确链接应该是<a href="edit_leave.php?edit=<?php echo $leave_id; ?>">编辑</a>),再查询该ID对应的休假记录所属用户:

// 过滤参数,防止非法输入与SQL注入
if (!isset($_GET['edit']) || !is_numeric($_GET['edit'])) {
    header('HTTP/1.0 400 Bad Request');
    die('无效的请求参数');
}
$leave_id = intval($_GET['edit']);

// 连接数据库(根据你的实际配置修改)
$conn = mysqli_connect('localhost', 'db_username', 'db_password', 'db_name');
if (!$conn) {
    die('数据库连接失败: ' . mysqli_connect_error());
}

// 用预处理语句查询记录所属用户ID,避免SQL注入
$query = "SELECT user_id FROM leave_records WHERE id = ?";
$stmt = mysqli_prepare($conn, $query);
mysqli_stmt_bind_param($stmt, 'i', $leave_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $record_user_id);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
mysqli_close($conn);

3. 验证权限并处理结果

对比当前用户ID与记录所属用户ID,若不匹配则拒绝访问:

// 如果是管理员角色,可额外添加判断允许编辑所有记录
if ($record_user_id !== $current_user_id) {
    header('HTTP/1.0 403 Forbidden');
    die('你没有权限编辑该休假记录');
}

// 权限校验通过,执行后续编辑页面逻辑
// ... 你的编辑功能代码 ...

额外安全建议

  • 坚持使用预处理语句:上述查询采用了mysqli预处理语句,能有效防范SQL注入攻击,避免恶意构造ID参数破坏数据库。
  • 减少敏感参数暴露:尽量避免在URL中直接明文传递ID,可改用POST请求传递,或对ID进行可逆加密处理(需保证加密逻辑安全)。
  • 完善角色权限逻辑:若系统存在管理员角色,需在权限校验中添加角色判断,允许管理员编辑所有休假记录:
// 假设会话中存储了用户角色,例如$_SESSION['role'] = 'admin'
if ($_SESSION['role'] !== 'admin' && $record_user_id !== $current_user_id) {
    header('HTTP/1.0 403 Forbidden');
    die('你没有权限编辑该休假记录');
}

内容的提问来源于stack exchange,提问作者Eliud Karanja Ndiritu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:35:29