BroadcastChannel
https://channel.gandli.eu.org/
https://channel.gandli.eu.org/
# 漏洞加固报告
## 1. 漏洞点名称
SQL 注入漏洞
此漏洞属于**SQL 注入类型漏洞**,关键特征包括:
- 用户输入直接拼接到 SQL 查询语句中,缺乏参数化处理。
- 攻击者可通过构造恶意输入绕过认证逻辑或执行恶意查询。
---
## 2. 漏洞代码
---
## 3. 漏洞产生的危害
1. SQL 注入的威胁**:
- 攻击者可通过构造恶意输入绕过认证机制,例如使用 `' OR '1'='1`。
- 攻击者可能读取、修改或删除数据库中的敏感数据。
2. **潜在风险**:
- 数据库被完全控制,可能导致数据泄露或篡改。
- 攻击者可能通过数据库权限进一步攻击服务器或网络。
3. **业务影响**:
- 用户账户信息泄露或被篡改。
- 整体系统的可用性和完整性受到威胁。
---
## 4. 漏洞产生的原因以及修复思路
### 漏洞产生的原因
1. 用户输入未经过安全处理,直接拼接到 SQL 查询语句中。
2. 缺乏参数化查询或预处理机制来防止注入。
### 修复思路
1. **使用参数化查询**:
- 通过 `mysqli` 或 `PDO` 的预处理语句绑定用户输入,避免拼接查询语句。
2. **输入过滤与输出编码**:
- 使用过滤函数清理输入,例如 `filter_var`。
- 对输出使用适当的转义,防止其他漏洞(如 XSS)。
3. **强化用户认证逻辑**:
- 添加密码哈希存储机制(例如 `password_hash` 和 `password_verify`)。
- 限制失败登录尝试,防止暴力破解。
---
## 5. 漏洞修复后代码截图
### 修复后的代码
```php
if (isset($_POST['login'])) {
$uname = trim($_POST['un']);
$pass = trim($_POST['ps']);
// 使用参数化查询防止 SQL 注入
$stmt = $conn->prepare('SELECT * FROM auth WHERE uname = ? AND pass = ?');
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo "You are allowed<br>";
$_SESSION['logged'] = true;
$_SESSION['admin'] = $row['username'];
header('Location: panel.php', true, 302);
exit();
} else {
echo "<script>alert('Try again');</script>";
}
}
```
### 修复后的增强措施
1. **使用密码哈希存储和校验
2. 限制登录尝试次数
通过记录用户登录尝试次数,防止暴力破解攻击。
---
## 关键词
#SQL注入 #参数化查询 #安全编码 #认证漏洞 #漏洞修复
## 1. 漏洞点名称
SQL 注入漏洞
此漏洞属于**SQL 注入类型漏洞**,关键特征包括:
- 用户输入直接拼接到 SQL 查询语句中,缺乏参数化处理。
- 攻击者可通过构造恶意输入绕过认证逻辑或执行恶意查询。
---
## 2. 漏洞代码
if (isset($_POST['login'])) {
$uname = str_replace('\'', '', urldecode($_POST['un']));
$pass = str_replace('\'', '', urldecode($_POST['ps']));
$run = 'select * from auth where pass=\'' . $pass . '\' and uname=\'' . $uname . '\'';
$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
echo "You are allowed<br>";
$_SESSION['logged'] = true;
$_SESSION['admin'] = $row['username'];
header('Location:panel.php', true, 302);
} else {
echo "<script>alert('Try again');</script>";
}
}---
## 3. 漏洞产生的危害
1. SQL 注入的威胁**:
- 攻击者可通过构造恶意输入绕过认证机制,例如使用 `' OR '1'='1`。
- 攻击者可能读取、修改或删除数据库中的敏感数据。
2. **潜在风险**:
- 数据库被完全控制,可能导致数据泄露或篡改。
- 攻击者可能通过数据库权限进一步攻击服务器或网络。
3. **业务影响**:
- 用户账户信息泄露或被篡改。
- 整体系统的可用性和完整性受到威胁。
---
## 4. 漏洞产生的原因以及修复思路
### 漏洞产生的原因
1. 用户输入未经过安全处理,直接拼接到 SQL 查询语句中。
2. 缺乏参数化查询或预处理机制来防止注入。
### 修复思路
1. **使用参数化查询**:
- 通过 `mysqli` 或 `PDO` 的预处理语句绑定用户输入,避免拼接查询语句。
2. **输入过滤与输出编码**:
- 使用过滤函数清理输入,例如 `filter_var`。
- 对输出使用适当的转义,防止其他漏洞(如 XSS)。
3. **强化用户认证逻辑**:
- 添加密码哈希存储机制(例如 `password_hash` 和 `password_verify`)。
- 限制失败登录尝试,防止暴力破解。
---
## 5. 漏洞修复后代码截图
### 修复后的代码
```php
if (isset($_POST['login'])) {
$uname = trim($_POST['un']);
$pass = trim($_POST['ps']);
// 使用参数化查询防止 SQL 注入
$stmt = $conn->prepare('SELECT * FROM auth WHERE uname = ? AND pass = ?');
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo "You are allowed<br>";
$_SESSION['logged'] = true;
$_SESSION['admin'] = $row['username'];
header('Location: panel.php', true, 302);
exit();
} else {
echo "<script>alert('Try again');</script>";
}
}
```
### 修复后的增强措施
1. **使用密码哈希存储和校验
// 注册用户时
$hashed_pass = password_hash($pass, PASSWORD_BCRYPT);
// 登录验证时
if (password_verify($pass, $row['pass'])) {
// 验证通过
}2. 限制登录尝试次数
通过记录用户登录尝试次数,防止暴力破解攻击。
---
## 关键词
#SQL注入 #参数化查询 #安全编码 #认证漏洞 #漏洞修复