SQL 注入 Impossible(4):PHP 源码分析与四级对比

概述 DVWA SQL 注入的四个等级中,Impossible 不是让你攻破的——它是安全样例,告诉你"如果一开始就写对,前面那些漏洞根本不会存在"。本文逐一拆解四级源码,以 Impossible 为重点,看它如何从根源上消除 SQL 注入。 一、Low:裸奔 $id = $_REQUEST[ 'id' ]; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query); 问题清单 问题 代码体现 后果 无过滤 直接 $_REQUEST['id'] 进 SQL 输入即代码 字符型拼接 WHERE user_id = '$id' — 引号包裹 ' 可用于闭合字符串上下文 报错暴露信息 or die(...mysqli_error()...) 攻击者看到语法错误,帮助调试 payload 为什么 1' or '1'='1' # 能打穿 -- 拼接后: SELECT ... WHERE user_id = '1' or '1'='1' #' -- ↑ 闭合 ↑ 注入 ↑ 注释吞尾 攻击者的 ' 提前结束了字符串字面量,or '1'='1' 进入代码上下文,# 吞掉尾部多余引号。数据越界变成了代码。 ...

August 4, 2026 · 4 min · 692 words