Injection Attack 注入攻击

把恶意代码插入到易受攻击应用里执行。Web 安全里最经典、危害最大的一类攻击。

为什么常年 OWASP Top

OWASP Top 10 自 2003 开始就一直把 injection 放榜首附近。根因从没变过——应用把用户输入当成代码来执行

几种常见类型

类型解释
SQL Injection把 SQL 注入到数据库查询 ' OR 1=1--
XSS (Cross-Site Scripting)把 JavaScript 注入到网页给别人执行
Command Injection把 shell 命令注入到系统调用
LDAP Injection注入 LDAP 查询
XXEXML 外部实体注入
NoSQL InjectionMongoDB / Elasticsearch 这类
Template Injection (SSTI)注入 Jinja2 / Twig 模板表达式

经典案例

-- 应用代码:
"SELECT * FROM users WHERE name = '" + input + "'"
 
-- 用户输入:
' OR '1'='1'; DROP TABLE users;--
 
-- 结果: 整张表没了

怎么防

  1. Prepared statements / 参数化查询 —— 把数据和代码分开,根本解
  2. Input validation —— 白名单优先
  3. Output encoding —— XSS 防御核心
  4. 最小权限 —— 数据库账号别给 DROP
  5. WAF —— 兜底,不能当主防御