好的,关于 SQL注入(SQL Injection),我给你详细讲讲:
SQL注入是一种代码注入攻击,攻击者通过在输入中插入恶意的 SQL 代码片段,使得应用程序执行未预期的数据库操作,导致数据泄露、篡改、甚至系统破坏。
' OR 1=1 --
;假设有如下代码:
SELECT * FROM users WHERE username = ' " + userInput + " ' AND password = ' " + passInput + " ';
userInput = alice
,passInput = 123
SELECT * FROM users WHERE username = 'alice' AND password = '123';
userInput = ' OR 1=1 --
SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '';
--
后面是注释,忽略密码条件,OR 1=1
总是为真,攻击成功绕过登录。方法 | 说明 |
---|---|
预处理语句(Prepared Statement) | 使用参数化查询,避免拼接字符串 |
ORM 框架 | 使用成熟的 ORM 框架,封装数据库操作 |
输入校验 | 对输入数据严格过滤、转义 |
最小权限原则 | 数据库账户权限限制,减少损害 |
使用 Web 应用防火墙(WAF) | 监测和拦截恶意请求 |