- **缺乏有效的访问控制**:未对每个请求和用户身份进行严格的访问控制,导致权限判断不到位。
- **信任用户输入**:直接使用用户输入的数据(如 URL 参数、表单数据等)进行权限验证,而没有对其进行适当的验证和限制。
- **不完善的权限检查**:在后台未对每个操作进行权限校验,只依
赖前端的展示权限,造成攻击者绕过前端控制。
- **未分配适当的用户角色**:用户角色和权限设置不当,导致某些用户能够执行本不该有的操作。

#### 修复思路

1. **最小化修改**:在修复越权漏洞时,应专注于添加或修改访问控制逻辑,避免大规模修改业务逻辑,确保兼容性。
2. **实施严格的访问控制**:根据每个用户的角色和权限对敏感资源进行细粒度的控制,避免任意用户访问他人数据。
3. **身份验证和权限校验**:对每个敏感操作都进行权限检查,确保用户只有在有权限时才能进行操作。
4. **输入验证和过滤**:不要信任用户输入,所有用户提供的数据必须经过验证和过滤,避免参数伪造和越权访问。

#### 漏洞修复

##### 1. **加强权限控制

修复方法:使用权限校验来确保用户只能访问自己的数据。例如,在数据库查询时,不允许直接使用来自客户端的 `user_id`,而应根据当前登录用户的身份来查询数据。

<?php
// 当前用户的ID
$current_user_id = $_SESSION['user_id']; // 通过会话获取当前登录用户的ID

// 用户只能访问自己的数据
$query = "SELECT * FROM users WHERE id = $current_user_id";
$result = mysqli_query($conn, $query);

// 显示用户信息
$row = mysqli_fetch_assoc($result);
echo "Hello, ".$row['name']."!";
?>

解释**:

- 当前用户的ID应该通过会话、Token等安全方式获取,而不是直接从用户输入中获取,防止攻击者篡改 `user_id`。

##### 2. **权限校验函数

修复方法:通过权限校验函数,确保每个请求的操作仅限于特定权限的用户执行。

<?php
// 权限检查函数
function check_permission($user_id, $action) {
// 检查用户是否有权限执行某个操作
if ($action == 'edit' && $_SESSION['role'] == 'admin') {
return true;
} elseif ($action == 'view' && $_SESSION['user_id'] == $user_id) {
return true;
}
return false;
}

// 用户输入的数据
$user_id = $_GET['user_id'];
$action = $_GET['action']; // 操作类型

// 检查是否有权限
if (check_permission($user_id, $action)) {
// 执行操作
echo "用户有权限执行此操作";
} else {
die('无权限访问');
}
?>

解释**:

- `check_permission()` 函数用来判断当前用户是否有权限执行某个特定操作。确保不同权限的用户只能执行被允许的操作。

##### 3. **禁止直接通过URL访问敏感资源

修复方法:避免通过URL直接访问敏感资源,改为使用会话或权限校验来访问。例如,通过检查登录状态或角色来限制访问。

<?php
// 通过会话验证用户身份
session_start();
if (!isset($_SESSION['user_id'])) {
die('请先登录');
}

// 如果用户尝试访问不属于他们的数据,进行检查
if ($_SESSION['user_id'] != $_GET['user_id']) {
die('无权限访问该用户数据');
}
?>

解释**:

- 使用 `session` 变量确保只有登录用户可以访问其自身数据,防止通过 URL 直接访问其他用户的数据。

#### 总结

1. **最小化修改**:修复越权漏洞时,尽量避免大规模的业务逻辑改动,专注于添加或修改访问控制逻辑,以确保现有系统互操作性。
2. **身份验证和权限校验*
*:在每个关键操作之前,必须严格校验用户的身份和权限,确保用户只能访问和操作自己有权访问的数据。
3. **严格的输入验证和过滤**:避免直接信任用户输入,确保所有敏感操作都经过严格的验证。
4. **会话和角色控制**:通过会话和角色控制访问权限,确保只有授权用户可以执行特定的操作。

通过这些措施,可以有效防止越权漏洞,提升系统的安全性。  
#越权漏洞 #Web安全 #权限控制 #安全修复

### 未授权访问/无鉴权/鉴权绕过

#### 漏洞点

未授权访问(或无鉴权/鉴权绕过)漏洞是指用户在没有适当身份验证和权限控制的情况下,访问本不应公开的资源或执行本不应允许的操作。这种漏洞通常是由于应用程序未正确实施身份验证机制或绕过了
权限验证,攻击者可通过直接访问未授权的 URL、篡改请求参数或使用其他手段绕过安全机制。

#### 漏洞代码

在以下示例中,应用程序直接根据传递的用户ID
返回数据,没有进行有效的权限验证,导致未授权的访问。
 
 
Back to Top