- 首页 >
- 问答 >
-
云计算 >
- centos exploit如何防范SQL注入
centos exploit如何防范SQL注入
小樊
32
2025-12-13 18:30:05
在 CentOS 上防范 SQL 注入的实用方案
一 应用层防护是根本
- 使用参数化查询/预编译语句(Prepared Statements/PDO/MySQLi),严禁字符串拼接 SQL。示例:
- PHP PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :u"); $stmt->bindParam(':u', $username); $stmt->execute();
- Python:
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
- 对输入实施白名单验证(类型、长度、格式、范围),拒绝含危险字符的请求;对富文本使用输出编码,避免二次注入。
- 实施最小权限原则:应用连接数据库使用专用低权账号,禁止 DROP/CREATE/ALTER 等高危权限;为不同业务分配最小必要库表权限。
- 统一错误处理:生产环境关闭错误回显,记录详细错误到日志,向用户展示通用错误提示,防止泄露表结构、路径等敏感信息。
- 使用安全的数据库连接:启用 SSL/TLS 加密,防止凭据与数据在传输中被窃听或篡改。
二 服务器与数据库加固
- 保持系统与软件更新:及时安装 CentOS 与中间件/数据库/语言运行时的安全补丁,修复已知漏洞。
- 配置防火墙:仅开放必要端口(如 80/443 对外,3306 仅内网/管理网可达);对数据库访问实施来源 IP 白名单。
- 数据库网络与账户安全:数据库默认仅本地监听;远程管理通过SSH 隧道/跳板机;禁止应用以 root 直连;定期轮换口令并限制连接来源。
- Web 服务器安全配置:禁用目录浏览、隐藏版本信息、限制请求方法、开启访问与错误日志,并对上传目录做执行权限限制。
三 部署 WAF 作为纵深防御
- 在 Apache 上部署 ModSecurity + OWASP Core Rule Set(CRS),可识别并阻断常见 SQL 注入 模式;必要时将规则动作设为 deny,status:403 直接拦截。
- 注意:WAF 属于辅助手段,规则更新滞后或误报/绕过均可能发生,不能替代代码层面的参数化与输入校验。
四 安全测试与持续监控
- 使用 sqlmap 在授权前提下进行漏洞扫描与验证(如:
sqlmap -u "http://example.com/item?id=1" --dbms=mysql),覆盖 GET/POST、Cookie、Header 等向量;切勿用于未授权目标。
- 建立日志集中与告警:收集 Web/DB 日志,对频繁触发 SQL 注入规则的来源 IP 进行封禁与取证;定期备份与演练恢复。
五 快速检查清单
| 检查项 |
关键动作 |
验证方式 |
| 代码层 |
全部数据库访问使用参数化查询 |
代码审计/IDE 检查 |
| 输入校验 |
白名单校验、长度/类型限制、输出编码 |
单元测试/模糊测试 |
| 权限配置 |
应用账号最小权限、禁用高危语句 |
DB 权限核查 |
| 错误信息 |
生产关闭回显,仅写日志 |
访问测试 |
| 传输加密 |
数据库启用 SSL/TLS |
抓包/配置核对 |
| 访问控制 |
防火墙仅放行业务端口,DB 仅内网访问 |
防火墙/监听地址核对 |
| WAF |
ModSecurity+CRS 启用并调优 |
规则命中日志 |
| 监控告警 |
日志集中、异常 SQL 与来源 IP 告警 |
日志平台/告警记录 |