2、Web基础知识
Cookie的介绍
什么是Cookie
Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
当用户第一次访问并登录一个网站的时候,Cookie的设置以及发送会经历以下4个步骤:
- 客户端发送一个请求到服务器
- 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
- 客户端保存Cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部
- 服务器检查Cookie并返回响应数据
Cookie的格式
Set-Cookie: NAME=VALUE; Expires/Max-age=DATE; Path=PATH; Domain=DOMAIN_NAME; Secure; HttpOnly; SameSite=Policy
参数意义:
- NAME: Cookie的名字
- VALUE: Cookie的值
- Expires: Cookie的过期时间
- Path: Cookie作用的路径
- Domain: Cookie作用的域名,Cookie是不可以跨域的
- SECURE:是否只在https协议下起作用
Expires属性:
Cookie中的maxAge用来表示该属性,单位为秒。 maxAge有3种值,分别为正数,负数和0。
- 如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中(每个浏览器存储的位置不一致)。
- 当maxAge属性为负数,则表示该Cookie只是一个临时Cookie,不会被持久化,仅在本浏览器窗口或者本窗口打开的子窗口中有效,关闭浏览器后该Cookie立即失效。
- 当maxAge为0时,表示立即删除Cookie
Cookie的类型
按照客户端中的存储位置,可分为会话Cookie和持久性Cookie
- 会话Cookie:保存在内存中,由浏览器维护,浏览器关闭后消失。
- 持久性Cookie:保存在硬盘里,有过期时间,用户手动清理或到了过期时间,持久性Cookie会被删除。
Cookie的设置
设置Cookie,用户可以通过浏览器设置计算机接收Cookie文件,选择性接收或阻止Cookie。
删除Cookie
Cookie自动提示
Cookie 的应用场景
- 网站浏览次数管理
- 对站点进行定制
- 记录用户名和密码
- 在电子商务站点中标识用户
浏览器对单个Cookie的大小,一个网站的Cookie个数,总的大小和个数都有限制--4KB,其实Cookie不适合用来作为大量数据的客户端存储,如果需要这个功能,可以使用浏览器的Local Storage 、IndexDB等新的功能来替代。
Session的介绍
- Session是一种服务器端的机制
- 在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去
Session的原理
- 用户第一次请求服务器时,服务器端会生成一个sessionId
- 服务器端将生成的sessionId返回给客户端,通过set-cookie
- 客户端收到sessionId会将它保存在Cookie中,当客户端再次访问服务端时会带上这个sessionId
- 当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionId,不存在就新建一个sessionId重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionId相对应的文件,文件中的键值便是sessionId,值为当前用户的一些信息
- 此后的请求都会交换这个 sessionId ,进行有状态的会话
Session的两种实现方式(也就是传递方式):
- 通过Cookie实现
- 通过URL重写来实现
可以对生成的Session设置过期时间,默认是30分钟(Tomcat)
Session 与Cookie的区别
- Cookie的数据保存在客户端浏览器,Session保存在服务器
- 服务端保存状态机制需要在客户端做标记,所以Session可能借助Cookie机制
- Cookie通常用于客户端保存用户的登录状态
- Session是可以存取任何类型的数据的,但是Cookie只能存入字符串
- Cookie存储数据大小有限制,Session没有限制
Token的介绍
Session的弊端
服务器压力增大
- 通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大
CSRF跨站请求伪造攻击
- session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击
扩展性不强
- session数据是保存在某个服务器的内存中的(不是共享的)
什么是Token
Token是服务端生成的一串加密后的字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码
Token的原理
基于Token的身份验证的过程如下:
- 用户通过用户名和密码发送请求
- 程序验证
- 程序返回一个签名的token给客户端
- 客户端储存token,并且每次用于每次发送请求
- 服务端验证token并返回数据
Token的优势
- 安全性
- 可扩展性
- 多平台跨域
工具的使用
Fiddler的使用
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(Cookie、html、js、css等文件)。 Fiddler 要比其他的网络调试器更简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式
Fiddler安装
- Fiddler官网下载地址:https://www.telerik.com/fiddler
- Fiddler安装注意事项:不要安装在有中文和特殊字符的目录
Fiddler工作原理
Fiddler拦截HTTP(S)请求
- 安装Fiddler后,Fiddler会自动为IE浏览器、谷歌浏览器配置代理信息,其他浏览器需要手动配置代理服务器,Fiddler默认端口是8888
- Fiddler默认只记录HTTP请求,需要进行配置才可以记录HTTPS请求,选择Tools->Fiddler Options->HTTPS,勾选Decrypt HTTPS traffic复选框,然后需要安装证书,点击yes安装证书
Fiddler功能介绍:左侧区域会话列表
- Result 表示HTTP返回的状态码。如 200、302、500等。
- Protocol 表示请求的协议:HTTP/HTTPS。
- Host 请求的IP或网址。
- URL 请求的路径。
- Body 请求资源的大小。
- Caching 请求的缓存过期时间或者缓存控制值。
- Content-Type 请求响应的类型。
- Process 发送此请求的进程:进程ID。
- Comments 允许用户为此会话添加备注。
- Custom 允许用户设置自定义值。
右边是详情和数据统计面板
- Statistics关于HTTP请求的性能(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)以及数据分析
- Inspectors是用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息
- Composer 自定义请求发送服务器,Parsed模式下你只需要提供简单的URL地址即可
- Filters 即过滤规则,通过设置过滤规则来过滤所需的http请求,勾选左上角的Use Filters开启过滤器
AutoResponder 可用于拦截某一请求,即按自己添加的指定规则重定向到本地的资源或Fiddler资源,从而代替服务器响应。
基本规则:
- 前缀为“EXACT:”表示完全匹配(大小写敏感)
- 无前缀表示基本搜索,表示搜索到字符串就匹配
- 前缀为“NOT:”表示发现就不匹配
- 前缀为“REGEX:”表示使用正则表达式匹配
Fiddler修改请求及返回值
- Fiddler通过设置断点,可以修改httpRequest 的任何信息包括host, Cookie或者表单中的数据
- 可以对request设置断点,也可以对response设置断点
举例:以百度为例,修改响应数据中title“百度一下,你就知道”为“test百度一下,你就知道”
- 设置断点--菜单选项After responses或快捷键Alt+F11
- 响应body解码-点击黄色区域进行body解码
- 修改title内容
- 点击Run to completion
- 同理可以对request设置断点
- 特定网站responses中断设置:快速命令行输入“bpafter www.baidu.com+Enter”,只会中断www.baidu.com;
- 特定网站中断取消:快速命令行输入“bpafter+Enter”;
- 特定网站request中断设置:快速命令行输入“bpu www.baidu.com+Enter”,只会中断www.baidu.com;
- 特定网站中断取消:快速命令行输入“bpu+Enter”
Fiddler限制网速
- 点击Rules – Customize Rules(快捷键Ctrl + R)打开Fiddler ScriptEditor,或者直接点开右侧主页签的FiddlerScript。
- 打开该文件后,Ctrl + F 查找m_SimulateModem标志位,可以看到如下代码:
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "150";
}
- request-trickle-delay中的值代表每KB的数据被上传时会被延时多少毫秒;
- response-trickle-delay则对应下载时每KB的数据会被延时多少毫秒
- 开启网络延迟, Rules->Performance,然后在子选项中可以看到一个Simulate Modems Speeds,选中。
练习通过设置request断点,修改百度搜索的关键字
Charles的使用
- Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据
- 下载地址:https://www.charlesproxy.com/download/
Charles 主要的功能包括:
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络
Charles抓取https请求
- 电脑安装证书
Charles设置
Charles提供了两种查看请求的视图:Stucture和Sequence
- Structure 视图将网络请求按访问的域名分类
- Sequence 视图将网络请求按访问的时间排序
Charles过滤请求
- Proxy -> Recording Setttings include:需要监控的host。如果列表为空时,默认监控所有请求, exclude:不需要监控的host
- Filter一栏中输入需要要过滤的host或者关键字
- 可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后即可执行
Charles模拟网速
- Proxy -> Throttle Setttings,Charles内置几种网络模型可直接使用,也可自定义来满足特定需求。 只针对特定host模拟网速时,只需要勾选上Only for select hosts。
Charles修改请求及返回值
- Proxy -> Breakpoints Setttings,像断点一样,当执行到指定规则链接时,触发breakpoints。即可以在请求到服务端前中断,也可以在返回到客户端前中断。在这个过程中便可以修改Request或者Response。
Charles修改请求及返回值
- 重定向 – Tools中的Map Local、Map Remote, Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件
Burp Suit的使用
使用Burp Suit截取HTTP请求
认识Burp Suit
- 用于攻击Web 应用程序的集成平台,包含了抓包、漏洞扫描、入侵、爬虫等工具,所有工具都共享一个请求,并能处理对应的HTTP 消息。
下载地址:
- https://portswigger.net/burp/communitydownload
Burp Proxy相当于BurpSuite的心脏,通过拦截,查看和修改所有的请求和响应您的浏览器与目标Web服务器之间传递。
使用步骤
- 配置浏览器网络代理
- 配置burp监听端口
安装证书
对HTTPS流量访问的时候,需要伪造证书,通过自签名的证书实现加密流量的截断,解密后进行分析修改再重新加密发给真实服务器。添加证书后不会再在访问HTTPS时报证书错误。通常为导入公钥证书
在开启代理后访问:127.0.0.1:8080,点击CA Certificate,进行保存CA证书
获得证书后在浏览器中导入到受信任的根证书颁发机构
- 拦截请求
- 修改请求
HTTP history

Options:设置代理监听、请求和响应,拦截反应,匹配和替换,ssl等
Options:配置响应的拦截规则
Options:Response Modification
Options:Match and Replace