# 工作原理

  1. 正常查询:应用程序将用户输入直接拼接到 SQL 语句中

    sql

  • SELECT * FROM users WHERE username = '用户输入' AND password = '用户输入'
  • 注入攻击:攻击者输入特殊构造的字符串

用户名: admin' -- 密码: [任意]

生成的 SQL 语句变为:

sql

  1. SELECT * FROM users WHERE username = 'admin' --' AND password = '任意'
    • - 是 SQL 注释符号,使得密码检查被忽略

# 常见攻击类型

  1. 基于错误的注入:通过错误消息获取数据库信息
  2. 联合查询注入:使用 UNION 操作获取其他表数据
  3. 布尔盲注:通过真 / 假响应推断数据
  4. 时间盲注:通过数据库响应延迟推断信息
  5. 堆叠查询:执行多个 SQL 语句

# 危害

  • 绕过认证
  • 窃取敏感数据
  • 修改或删除数据
  • 执行管理员操作
  • 完全控制数据库服务器

# 防御措施

  1. 使用参数化查询 (预编译语句)

    python

  • # 正确做法 cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))
  • 输入验证和过滤
  • 最小权限原则:数据库账户只授予必要权限
  • 使用 ORM 框架
  • 定期更新和打补丁
  • 错误处理:不向用户显示详细数据库错误
更新于

请我喝[茶]~( ̄▽ ̄)~*

麻糖 微信支付

微信支付

麻糖 支付宝

支付宝

麻糖 贝贝

贝贝