温馨提示×

温馨提示×

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

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

什么是SQL注入攻击原理

发布时间:2026-06-30 23:50:25 来源:亿速云 阅读:82 作者:小樊 栏目:数据库

SQL注入(SQL Injection)是一种常见的Web安全漏洞攻击,其核心原理是 攻击者通过在应用程序的输入中插入恶意的SQL代码,欺骗后端数据库执行非预期的操作

下面从原理、过程、示例和防御几个方面说明。


一、SQL注入的基本原理

大多数Web应用都会用SQL语句与数据库交互,例如:

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

如果程序直接把用户输入拼接到SQL语句中,而没有做任何安全处理,攻击者就可以构造特殊输入,改变SQL语句的逻辑。


二、一个简单的示例

1️⃣ 正常登录逻辑(有漏洞)

后端代码(伪代码):

String sql = "SELECT * FROM users WHERE username = '" 
           + username + "' AND password = '" 
           + password + "'";

用户输入:

用户名:admin
密码:123456

生成的SQL:

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

✅ 正常执行


2️⃣ 攻击者构造恶意输入

攻击者输入:

用户名:admin' --
密码:(随便填)

生成的SQL变成:

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

-- 在SQL中是注释符,后面的内容被忽略。

✅ 攻击者无需密码即可登录


三、SQL注入能做什么?

SQL注入的危害非常大,常见包括:

  • ✅ 绕过登录验证
  • ✅ 查询、窃取数据库数据
  • ✅ 修改、删除数据库内容
  • ✅ 获取数据库结构(表名、字段名)
  • ✅ 在极端情况下执行系统命令(如 xp_cmdshell

四、SQL注入发生的根本原因

未对用户输入做任何校验或转义
使用字符串拼接构造SQL语句
过度信任前端传来的数据


五、常见SQL注入类型

类型 说明
联合查询注入 使用 UNION 查询其他表数据
布尔盲注 通过真假判断推断数据
时间盲注 通过延时判断数据
报错注入 利用数据库报错回显信息
堆叠注入 执行多条SQL语句

六、如何防御SQL注入(重点)

✅ 1. 使用预编译语句(最有效)

PreparedStatement(Java)

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

✅ 数据库会把输入当成数据,而不是SQL指令


✅ 2. 使用ORM框架

如:

  • MyBatis(正确使用 #{}
  • Hibernate
  • JPA

❌ 避免拼接SQL


✅ 3. 输入校验 & 白名单

  • 限制输入格式(长度、字符类型)
  • 对特殊字符进行过滤或转义

✅ 4. 最小权限原则

  • 数据库账号不使用 root / sa
  • 禁止Web程序执行 DROPxp_cmdshell 等危险操作

✅ 5. 关闭错误回显

  • 不把数据库报错信息直接展示给用户

七、一句话总结

SQL注入的本质是:把用户输入当成SQL代码执行了。
防御的核心:永远不要相信用户输入,使用参数化查询。

如果你愿意,我也可以:

  • 真实攻击案例 演示
  • 对比 MySQL / Oracle / SQL Server 的注入差异
  • CTF 中的 SQL 注入技巧
向AI问一下细节

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

AI