什么是 Injection(注入)?
Injection 是一类常见的安全漏洞,攻击者通过向应用程序输入恶意数据,诱使系统执行非预期的命令或查询。 最著名的类型包括 SQL 注入、跨站脚本(XSS) 和 操作系统命令注入。
根据 OWASP Top 10,Injection 长期位居 Web 应用安全风险榜首。
常见注入类型
- SQL 注入:通过构造恶意 SQL 语句操控数据库。
- XSS(跨站脚本):注入恶意脚本在用户浏览器中执行。
- 命令注入:在服务器端执行任意系统命令。
- LDAP 注入:针对 LDAP 查询的注入攻击。
- 模板注入:利用模板引擎执行任意代码。
简单示例:SQL 注入
假设后端代码如下(存在漏洞):
// 危险的 PHP 代码示例
$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
攻击者可传入:' OR '1'='1,导致查询变为:
SELECT * FROM users WHERE name = '' OR '1'='1'
结果:返回所有用户数据!
如何防御?
- 使用参数化查询(Prepared Statements)防止 SQL 注入。
- 对用户输入进行严格验证和转义。
- 实施最小权限原则(数据库账户权限最小化)。
- 使用内容安全策略(CSP)缓解 XSS。
- 定期进行安全测试与代码审计。
互动演示(仅前端模拟)
尝试输入用户名,观察“安全”与“不安全”的处理差异: