温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是数据库SQL注入攻击

发布时间:2026-09-25 21:49:38 来源:亿速云 阅读:96 作者:小樊 栏目:数据库

SQL注入攻击(SQL Injection) 是一种常见的网络攻击方式,攻击者通过在应用程序的输入中插入恶意的 SQL 代码,欺骗数据库执行非预期的命令,从而获取、篡改或破坏数据。


一、基本原理

很多程序会这样拼接 SQL 语句:

用户名:admin
密码:123456

程序生成的 SQL 可能是:

SELECT * FROM users
WHERE username = 'admin' AND password = '123456';

如果攻击者在密码框输入:

' OR '1'='1

最终 SQL 变成:

SELECT * FROM users
WHERE username = 'admin' AND password = '' OR '1'='1';

因为 '1'='1' 永远为真,攻击者可绕过登录验证。


二、常见危害

  • 绕过登录认证
  • 窃取用户数据(账号、密码、隐私)
  • 修改或删除数据库内容
  • 执行管理员操作
  • 在极端情况下控制服务器

三、典型注入示例

1. 绕过登录

' OR '1'='1' --

2. 获取额外数据

' UNION SELECT username, password FROM admin --

3. 删除数据(危险)

'; DROP TABLE users; --

四、防御方法(重点)

✅ 1. 使用参数化查询(最重要)

不要拼接 SQL 字符串

❌ 错误示例:

String sql = "SELECT * FROM users WHERE name='" + name + "'";

✅ 正确示例(PreparedStatement):

String sql = "SELECT * FROM users WHERE name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, name);

✅ 2. 使用 ORM 框架

如:

  • MyBatis(使用 #{} 而非 ${})
  • Hibernate
  • JPA

✅ 3. 输入校验

  • 限制长度
  • 白名单校验
  • 禁止特殊字符

✅ 4. 最小权限原则

  • 数据库账号不使用 root
  • 只给必要权限

✅ 5. 错误信息不暴露给用户

  • 不显示 SQL 错误详情
  • 使用统一错误页

五、一句话总结

SQL注入就是“让用户输入的内容变成了SQL代码”,防御的核心是“永远不要把用户输入当代码执行”。

如果你愿意,我也可以用 真实案例 / 代码演示 / 面试题角度 再给你讲一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手