SQL 注入
SQL 注入是把恶意 SQL 拼进输入导致执行:唯一可靠的防御是参数化查询(预编译占位符),拼接字符串永远不安全。
Key PointsSQL,注入,安全,参数化查询,预编译
讲解
SQL 注入是把恶意 SQL 拼进输入导致执行:唯一可靠的防御是参数化查询(预编译占位符),拼接字符串永远不安全。
示例
SQL
-- 危险:字符串拼接,输入 ' OR '1'='1 即可绕过
sql = "SELECT * FROM users WHERE name='" + u + "'";
-- 安全:参数化查询(占位符由驱动转义)
sql = "SELECT * FROM users WHERE name=?"; -- 再绑定参数 uOutput
-- 拼接版被注入后相当于
SELECT * FROM users WHERE name='' OR '1'='1';
-- 返回全表!参数化版则按字面值匹配,注入无效。除了参数化,还要最小权限(应用账号不给 DDL)、对报错信息脱敏、开启 WAF;但参数化查询是必须项。
讲解
SQL 注入是把恶意 SQL 拼进输入导致执行:唯一可靠的防御是参数化查询(预编译占位符),拼接字符串永远不安全。
示例
SQL
-- 危险:字符串拼接,输入 ' OR '1'='1 即可绕过
sql = "SELECT * FROM users WHERE name='" + u + "'";
-- 安全:参数化查询(占位符由驱动转义)
sql = "SELECT * FROM users WHERE name=?"; -- 再绑定参数 uOutput
-- 拼接版被注入后相当于
SELECT * FROM users WHERE name='' OR '1'='1';
-- 返回全表!参数化版则按字面值匹配,注入无效。除了参数化,还要最小权限(应用账号不给 DDL)、对报错信息脱敏、开启 WAF;但参数化查询是必须项。