### 漏洞概述 **漏洞名称**: 错误基于的SQL注入漏洞(Error-Based SQL Injection) **受影响版本**: Pizza E-commerce System 1.0 **漏洞类型**: SQL注入(基于错误) **严重程度**: 高 **状态**: 未修补 **漏洞描述**: 在Pizza Ecommerce系统的`delete cart`功能中发现了一个基于错误的SQL注入漏洞。该漏洞发生在`id`参数未正确 sanitization 时,允许攻击者向后端数据库查询中注入恶意SQL命令。 **攻击技术**: - 利用`extractvalue()`函数强制数据库返回敏感数据。 - 提取数据库名称、表名和列结构。 - 检索用户名和密码哈希。 - 删除或操纵敏感记录。 - 通过会话数据提取提升权限。 ### 影响范围 | 影响 | 描述 | |------------|----------------------------------------| | 机密性 | 完整数据库模式和用户凭证暴露 | | 完整性 | 未经授权删除或修改记录 | | 可用性 | 大规模删除导致服务中断 | | 权限提升 | 会话劫持和管理员访问 | ### 修复方案 **修复代码**: ```php public function delete_cart() { if(!isset($_SESSION['login_user_id'])) return "0"; $id = (int)$_POST['id']; // CAST TO INTEGER $this->conn->query("DELETE FROM cart WHERE id = $id"); return "1"; } ``` **缓解建议**: 1. **使用预处理语句**: 采用参数化查询以防止SQL注入。 2. **输入验证**: 验证并清理`id`参数,仅接受预期值(如数字ID)。 3. **数据库权限**: 限制数据库用户权限以最小化SQL注入的潜在损害。 4. **监控和日志记录**: 跟踪和警报异常模式,如慢查询或重复访问尝试。 5. **安全测试**: 定期进行渗透测试和代码审查,以识别和缓解漏洞。 6. **错误处理**: 避免在响应中暴露数据库相关错误,这可能会帮助攻击者。 ### 参考 - **CWE-89**: 不当中和SQL命令中的特殊元素 - **OWASP SQL注入预防备忘单**