SQL注入对比演示

显示输入框内Payload提示(placeholder)
✅ 正常账号:admin / 123456
✅ 注入测试1:用户名输入 admin' -- ,密码随便填写即可绕过
✅ 注入测试2:用户名填admin,密码框输入 ' OR '1'='1
✅ 同样尝试注入payload,这里无法绕过登录
✅ 原理:使用参数化查询,用户输入永远只作为普通文本

什么是SQL注入

SQL注入的本质:后端直接把用户输入的字符串拼接进SQL语句,用户输入被当成SQL代码执行。

1. 漏洞版本SQL拼接逻辑

原始模板:

SELECT * FROM user WHERE username='${username}' AND password='${password}'

当用户名填入:admin' --

拼接之后最终执行SQL:

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

2. 安全版本(参数化查询)

SQL模板固定不变,用 ? 作为占位符:

SELECT * FROM user WHERE username=? AND password=?

数据库把传入内容只当普通字符串,单引号不会被当作SQL语法。

3. 核心结论

4. 防御手段优先级

① 参数化查询(首选) > ② 最小数据库权限 > ③ 关闭报错回显 > ④ WAF防火墙