在 SQL 注入的实战中数据提交方式是注入的「入口通道」我们的恶意 SQL 语句必须通过用户提交数据的「路」才能进入后端数据库执行。很多初学者只懂 GET 型 URL 注入遇到 POST 表单、Cookie、HTTP 头注入就无从下手。这篇博客结合 sqli-labs 靶场实操完整拆解GET、POST、Cookie、REQUEST、HTTP 头五大提交方式的注入原理、测试方法、工具使用既是自己的体系复盘也给入门者一份可直接复刻的实战指南彻底打通全场景注入的逻辑。一、核心前置SQL 注入的本质与提交方式的关系️ 大白话解释SQL 注入的本质是把恶意 SQL 语句掺杂在用户提交的数据中让后端数据库执行。而「数据提交方式」就是恶意语句的入口通道不同的提交方式对应后端不同的接收变量$_GET/$_POST/$_COOKIE/$_REQUEST/$_SERVER等不同的入口测试方法、工具使用、绕过逻辑完全不同无论哪种方式核心都是「用户输入未过滤直接拼接 SQL」。二、GET 方式注入最基础、最常见的 URL 注入2.1 大白话解释GET 注入是最入门的注入类型把注入语句直接拼在 URL 参数里地址栏就能看到后端通过$_GET接收参数直接拼接到 SQL 语句中执行。2.2 原理与场景后端接收变量$_GET[id]数据位置URL 参数如http://xxx.com/?id1典型场景文章详情页、用户信息页、商品详情页等用id/page等数字参数传参的页面后端 SQL 原型SELECT * FROM users WHERE id1 LIMIT 0,1;2.3 注入特点与实操特点✅ 无需抓包工具浏览器直接测试❌ 数据长度受限URL 最大约 2KB不适合大 payload❌ 安全性低注入痕迹直接暴露在 URL 日志中✅ 可直接用union联合查询、报错注入等方式测试。实操示例sqli-labs Less-2正常访问http://localhost/sqli-labs-master/Less-1/?id1注入测试http://localhost/sqli-labs-master/Less-1/?id1 and 11#页面正常返回数据注入成功直接在 URL 中完成注入。三、POST 方式注入表单场景的核心注入类型3.1 大白话解释POST 注入是最常见的实战注入类型数据通过表单提交隐藏在请求体中不显示在 URL 里后端通过$_POST接收参数直接拼 SQL。3.2 原理与场景源码验证图片中表单methodpost后端用$_POST[uname]接收参数无过滤直接拼 SQL是典型的 POST 注入场景。后端接收变量$_POST[uname]/$_POST[passwd]数据位置HTTP 请求体Form Data典型场景登录框、搜索框、注册页、留言板等表单提交场景对应 sqli-labs Less-11后端 SQL 原型SELECT username, password FROM users WHERE username$uname AND password$passwd LIMIT 0,1;3.3 注入特点与实操特点✅ 数据在请求体中必须用抓包工具如 Burp Suite拦截修改✅ 数据长度无限制可传输大 payload✅ 安全性更高注入痕迹不直接暴露在 URL 中✅ 注入逻辑与 GET 完全一致仅提交入口不同。实操步骤Burp Suite 抓包注入对应图片源码抓包拦截打开 Burp Suite 拦截在登录框输入任意内容提交表单修改请求体在uname参数后拼接注入语句unameadmin or 11--passwd123456submitSubmit放行请求Burp 中点击Forward后端执行注入语句无需正确密码即可登录注入成功。四、Cookie 方式注入隐藏在请求头中的隐形注入入口4.1 大白话解释Cookie 注入是隐藏性极高的注入类型数据通过 Cookie 请求头传递后端通过$_COOKIE接收常用于用户身份认证、记住登录状态等场景很容易被忽略。4.2 原理与场景后端接收变量$_COOKIE[s]/$_COOKIE[uname]数据位置HTTP 请求头的Cookie字段典型场景用户身份认证、记住登录、后台会员系统等后端 SQL 原型SELECT * FROM users WHERE id$s LIMIT 0,1;4.3 注入特点与实操特点✅ 注入入口在 Cookie 请求头隐藏性极高常规测试很难发现✅ 必须用抓包工具修改 Cookie 头才能注入✅ 常见于后台、会员系统等依赖 Cookie 认证的场景可用于绕过前端防御如 Less-20。实操示例抓包拦截Burp 拦截正常请求找到Cookie头修改 Cookie在 Cookie 值后拼接注入语句Cookie: s2222放行请求后端执行注入语句页面正常返回注入成功。源码验证图片中$c$_COOKIE[s];后端直接用 Cookie 值拼 SQL无过滤存在注入点。五、REQUEST 方式注入「万能接收」的注入风险5.1 大白话解释PHP 的$_REQUEST是超全局变量相当于「万能接收器」可以同时接收GET、POST、COOKIE三种方式提交的数据等于给注入开了多个入口。5.2 原理与风险后端接收变量$_REQUEST[id]/$_REQUEST[uname]数据位置任意GET/POST/COOKIE 均可核心风险无论用 GET、POST 还是 Cookie 提交id/uname都能被后端接收攻击者可以绕过前端表单限制用任意方式提交注入语句即使前端只做了 POST 表单也能通过 GET/Cookie 注入。5.3 实操示例对应图片 sqli-labs Less-2/11后端代码$id$_REQUEST[id];/$uname$_REQUEST[uname];测试 1GET 方式提交?id1 and 11#注入成功测试 2POST 方式在请求体提交id1 and 11#注入成功测试 3Cookie 方式提交id1 and 11#注入成功效果三种方式均可注入彻底打通入口。源码验证图片中 Less-11 将uname改为$_REQUEST[uname]即使是 POST 表单GET 提交也能被接收存在注入风险。六、HTTP 头Header注入最隐蔽的「隐形注入」6.1 大白话解释HTTP 头注入是最隐蔽的注入类型注入入口在 HTTP 请求头的字段中如 User-Agent、Referer、X-Forwarded-For后端获取这些信息存储到数据库未做过滤就会产生注入。6.2 原理与场景后端接收变量$_SERVER[HTTP_USER_AGENT]/$_SERVER[HTTP_REFERER]等数据位置HTTP 请求头典型场景网站统计用户访问信息浏览器、IP、来源存储到数据库后台日志记录、用户行为分析等注入本质后端将请求头信息如 User-Agent直接拼接到 SQL 语句未做过滤产生注入。6.3 常见注入请求头请求头字段作用注入场景User-Agent客户端浏览器信息统计用户访问浏览器Referer请求来源页面统计访问来源Cookie用户身份凭证身份认证即 Cookie 注入X-Forwarded-For客户端真实 IP统计用户 IPHost请求的主机名主机相关业务6.4 注入特点与实操特点✅ 注入入口完全隐藏常规测试很难发现✅ 必须用抓包工具修改请求头才能注入✅ 是「绕过 WAF」「绕过前端过滤」的常用手段。实操示例User-Agent 注入抓包拦截Burp 拦截正常请求找到User-Agent头修改请求头在User-Agent后拼接注入语句User-Agent: Mozilla/5.0 and 11#放行请求后端执行注入语句注入成功。七、全提交方式注入核心总结表提交方式后端接收变量数据位置工具需求典型场景核心特点GET$_GETURL 参数无需抓包浏览器直接测试URL 传参页面id、page 等最基础、最常见直接浏览器操作POST$_POST请求体Form Data必须抓包Burp Suite表单提交登录、搜索等表单场景核心无长度限制Cookie$_COOKIECookie 请求头必须抓包身份认证、记住登录隐藏性高易被忽略可绕防御REQUEST$_REQUEST任意GET/POST/COOKIE任意方式后端用 REQUEST 接收参数「万能接收」多入口可注入风险极高HTTP 头$_SERVER[HTTP_xxx]HTTP 请求头必须抓包日志统计、用户行为分析隐形注入隐藏性极高难发现八、实战工具与技巧Burp Suite 核心用法8.1 Burp Suite 核心操作拦截请求开启Intercept is on拦截浏览器所有请求修改参数在Raw标签中直接修改 GET 参数、POST 请求体、Cookie、请求头重放测试用Repeater模块反复修改 payload测试注入效果自动化扫描用Scanner模块自动检测 GET/POST/Cookie/ 头注入。8.2 注入测试通用流程判断提交方式抓包查看数据是在 URL、请求体还是 Cookie / 头中判断数据类型数字型 / 字符型 / 搜索型确定闭合方式构造注入语句根据数据类型构造闭合 条件 注释修改请求用 Burp 修改对应位置的参数验证注入根据页面返回 / 报错判断注入是否成功后续利用用union、报错、盲注等方式获取数据、提权。九、防御方案针对不同提交方式的防护9.1 通用核心防御所有方式通用参数化查询PDO/MySQLi从根源杜绝 SQL 注入无论哪种提交方式都有效最小权限原则数据库账号仅授予最小必要权限禁止 root/File 权限输入过滤与校验对所有用户输入GET/POST/COOKIE/ 头做严格过滤转义特殊字符。9.2 针对性防护GET/POST严格校验参数类型数字型强制转 int字符串型转义特殊字符CookieCookie 值做签名 / 加密禁止直接拼接 SQLREQUEST禁止使用$_REQUEST明确指定接收方式$_GET/$_POSTHTTP 头请求头信息仅做日志记录禁止存储到数据库或拼接 SQL。十、学习复盘写给自己也给入门的你数据提交方式是 SQL 注入的「入口地图」GET 是入门直接在 URL 中操作最容易上手POST 是核心表单场景无处不在必须掌握 Burp 抓包Cookie/HTTP 头是进阶隐藏性高是渗透测试的「加分项」REQUEST 是风险点后端用「万能接收」等于给注入开了多扇门。无论哪种提交方式注入的本质都是「用户输入未过滤直接拼接 SQL」防御的核心都是「参数化查询 输入校验」。搞懂了提交方式就搞懂了注入的全场景入口后续的自动化工具SQLMap、绕过 WAF、提权等都是在此基础上的延伸。