温馨提示×

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 告警 日志平台/告警记录

0