温馨提示×

温馨提示×

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

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

什么是SQL注入风险

发布时间:2026-09-05 08:11:14 来源:亿速云 阅读:98 作者:小樊 栏目:数据库

SQL 注入风险(SQL Injection) 是指:

应用程序在拼接或处理 SQL 语句时,把用户输入的内容直接当作 SQL 代码执行,导致攻击者可以通过构造特殊输入,改变原本的 SQL 逻辑,从而:

  • 绕过登录验证
  • 窃取、修改、删除数据库数据
  • 执行管理员操作
  • 在某些情况下控制服务器

一、简单例子(有风险写法)

假设登录 SQL 是这样拼的:

SELECT * FROM users
WHERE username = '用户输入'
AND password = '用户输入';

如果用户输入用户名:

admin' --

最终 SQL 变成:

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

-- 是 SQL 注释,后面的密码校验被忽略,直接以 admin 登录。


二、常见 SQL 注入风险点

  1. 字符串拼接 SQL

    String sql = "SELECT * FROM user WHERE name = '" + name + "'";
    
  2. 动态 SQL 未校验

    • 排序字段
    • 表名
    • IN 条件
  3. 前端参数直接进 SQL

    • URL 参数
    • 表单字段
    • Cookie

三、SQL 注入的危害

风险类型 说明
数据泄露 查到全表、其他用户数据
数据破坏 删除、修改业务数据
权限提升 登录管理员账号
系统失控 结合数据库功能执行系统命令

四、如何防止 SQL 注入(核心)

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

Java(PreparedStatement)

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

MyBatis

<select id="getUser">
  SELECT * FROM user WHERE name = #{name}
</select>

❌ ${name} 有注入风险
✅ #{name} 安全


✅ 2. 最小权限原则

  • 数据库账号只给必要权限
  • 不用 root / sa 连业务库

✅ 3. 输入校验

  • 白名单(允许的值)
  • 类型、长度、格式校验

✅ 4. 不暴露错误信息

  • 不把 SQL 错误直接返回给用户

五、一句话总结

SQL 注入风险 = 把用户当“代码”执行了
防注入的核心 = 永远别拼 SQL,用参数化

如果你愿意,我可以:

  • 用你熟悉的编程语言举例
  • 帮你检查某段代码是否有注入风险
  • 讲“盲注 / 时间盲注”等进阶内容
向AI问一下细节

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

AI
助
手