SQL 注入

SQL 注入是把恶意 SQL 拼进输入导致执行:唯一可靠的防御是参数化查询(预编译占位符),拼接字符串永远不安全。

Intermediate
Key PointsSQL,注入,安全,参数化查询,预编译

讲解

SQL 注入是把恶意 SQL 拼进输入导致执行:唯一可靠的防御是参数化查询(预编译占位符),拼接字符串永远不安全。

示例

SQL
-- 危险:字符串拼接,输入 ' OR '1'='1 即可绕过
sql = "SELECT * FROM users WHERE name='" + u + "'";

-- 安全:参数化查询(占位符由驱动转义)
sql = "SELECT * FROM users WHERE name=?";  -- 再绑定参数 u
Output
-- 拼接版被注入后相当于
SELECT * FROM users WHERE name='' OR '1'='1';
-- 返回全表!参数化版则按字面值匹配,注入无效。
除了参数化,还要最小权限(应用账号不给 DDL)、对报错信息脱敏、开启 WAF;但参数化查询是必须项。

Friends & Partners