HTTP 协议详解 —— 从渗透测试视角理解
概述
HTTP(HyperText Transfer Protocol)是应用层协议,默认端口 80,明文传输。特点是无状态、无连接、明文不安全。
理解 HTTP 是学 Web 安全的第一步 —— 抓包、改包、重放、接口调试、挖漏洞全靠它。
HTTP 整体流程
- 建立 TCP 三次握手(传输层连接)
- 直接在 TCP 连接上传输 HTTP 明文内容(无加密、无 TLS 握手)
- 按 HTTP 标准格式完成请求/响应
- 通信完成后,发起 TCP 四次挥手断开连接
请求结构
1 | POST /user/login |
1. 请求行
- 请求方法:
GET/POST/PUT/DELETE - 请求 URL:
/user/login - HTTP 版本:
HTTP/1.1、HTTP/2
2. 请求头
| 头部 | 作用 |
|---|---|
Host |
目标主机 |
User-Agent |
客户端标识(浏览器类型) |
Cookie |
用户身份/登录状态 |
Referer |
从哪个页面跳过来 |
Content-Type |
请求体的数据类型 |
3. 空行(必须有)
4. 请求体
传给服务器的数据:登录账号密码、表单内容、上传的文件、JSON 数据等。
1 | { "username": "admin", "password": "123456" } |
记忆规则:
GET→ 没有请求体POST/PUT/PATCH→ 一般有请求体
常用请求方法
| 方法 | 用途 | 特点 |
|---|---|---|
GET |
获取资源 | 参数在 URL 中,可缓存 |
POST |
提交数据 | 参数在请求体,相对安全 |
PUT |
完整覆盖修改 | 幂等 |
PATCH |
局部修改 | 只改某个字段 |
DELETE |
删除资源 | 幂等 |
HEAD |
只拿响应头 | 探活、省流量 |
OPTIONS |
问支持哪些方法 | 跨域预检 |
响应结构
1 | 200 OK |
常见状态码
2xx 成功
200 OK— 请求成功
3xx 重定向
301— 永久重定向(换域名)302— 临时重定向304— 资源没变,用本地缓存
4xx 客户端错误
400— 请求参数错误401— 未登录/没 token403— 禁止访问(登录了但没权限)404— 资源不存在405— 方法错误(该用 POST 却发了 GET)
5xx 服务端错误
500— 服务器内部错误(代码报错/数据库崩了)502— 网关错误(超时/负载/挂了)503— 服务器维护中
连状态码都没拿到的情况
- 无法连接 / DNS 解析失败 / 超时
- 这是网络层面就断了,HTTP 请求根本没到达服务器
为什么 HTTP 不够安全
- 明文传输:易被窃听、篡改、劫持
- 无加密:中间人可以随意修改
- 无身份校验:无法确认通信对方是否伪冒
现在 Web 已逐步迁移到 HTTPS(443 端口)。
渗透测试要点
- 用 Burp Suite 抓包,分析请求/响应结构
- 重点关注 Cookie、Authorization、Referer 等头部
- 修改参数值测试是否存在注入、越权、XSS
- 观察状态码变化判断后端行为
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YJZ's Security Lab!