XSS 学习前的 HTTP 协议基础回顾
在正式学习 XSS 之前,需要先回顾 HTTP 协议的基础特性,为后续理解 Cookie、Session、前端脚本执行、会话劫持等内容打下基础。
二、HTTP 协议基础概念
HTTP(超文本传输协议)是浏览器与 Web 服务器之间通信的通用规范。所有网页访问、表单提交、数据交互,均基于 HTTP 协议完成。
HTTP 最核心特性:无状态协议
- 服务器不会永久记录用户访问行为与登录状态
- 每一次客户端请求都是相互独立、互不关联
正因为 HTTP 是无状态的,网站需要通过 Cookie、Session 来维持用户登录身份。这也是 XSS 攻击能够利用的关键条件。
三、常见 HTTP 请求方式
Web 业务中最常用的两类请求方式:
- GET 请求
- 用于向服务器获取、查询数据
- 参数直接拼接在 URL 链接中,公开可见,长度有限
- 常用于页面访问、内容查询、搜索等只读操作
- POST 请求
- 用于向服务器提交、新增数据
- 参数存放于请求体内部,不在地址栏展示
- 常用于账号登录、用户注册、发布评论、表单提交等数据提交操作
除此之外,还有 HEAD、PUT、DELETE、OPTIONS 等拓展请求方式,日常开发中使用较少,简单了解即可。
提示: Web 中大部分可控输入点、XSS 漏洞触发点,都集中在 GET 与 POST 参数当中。
四、HTTP 请求完整结构
标准 HTTP 请求分为三个部分:
- 请求行
包含请求方法、访问资源路径、HTTP 协议版本
示例:GET /login.php HTTP/1.1 - 请求头
用于描述本次请求的附加信息,包含多个关键字段:
- Host:指定访问的目标域名与端口
- User-Agent:标识当前访问的浏览器与设备信息
- Referer:标识当前请求的来源页面地址
- Cookie:浏览器本地存储的身份凭证,XSS 主要攻击目标
- Content-Type:定义提交数据的格式类型
- 请求体
仅 POST、PUT 等请求存在,用于存放表单数据、账号密码、提交内容等自定义参数
五、HTTP 响应完整结构
客户端发送请求后,服务器会返回对应的响应内容,同样分为三部分:
- 响应行
包含协议版本、状态码、状态描述
常见状态码:
- 200:正常访问
- 302:重定向
- 404:资源不存在
- 500:服务器错误
- 响应头
服务器返回的配置信息:
- Set-Cookie:服务器下发指令,让浏览器本地写入并保存 Cookie
- 各类安全响应头,可用于防御 XSS、CSRF 等 web 漏洞
- 响应体
服务器返回的核心内容,即前端网页 HTML 源码。浏览器会自动解析响应体内的 HTML、JS、CSS 代码,XSS 攻击正是利用浏览器解析恶意脚本实现攻击