七张图看懂 Web 登录全过程:HTTP、Cookie、Session、JWT、RBAC 全串起来了
终于搞懂 Web 登录全流程了(HTTP、Cookie、Session、JWT、RBAC )
最近一直在学 Web 安全相关的基础知识,前面陆续学了:
- HTTP
- Cookie
- Session
- JWT
- RBAC
但是我发现一个问题:
这些东西单独看好像都懂了,但真正到了“网站登录”这个场景里,又容易乱。
所以今天我试着把整个 Web 登录流程串起来,顺便也记录一下自己的学习理解。
如果你和我一样是刚开始学 Web 安全,希望这篇文章能帮你把这些知识真正连起来。
先给大家看一下web完整流程的总览图:
一、我们登录网站时到底发生了什么?
比如:我们打开一个网站。
输入:
- 用户名
- 密码
然后点击登录。
看起来只是简单的一步。
但实际上浏览器和服务器之间已经开始了一整套通信流程。
二、HTTP 请求开始
首先:浏览器会通过 HTTP 请求,把账号密码发送给服务器。
一般使用的是:POST /login HTTP/1.1
因为登录属于提交数据。
这里通常会把:
- username
- password
放到请求体里面。
简单理解就是:
浏览器 → 服务器
“我想登录,这是我的账号密码”
三、服务器验证账号密码
服务器收到请求以后:
会去数据库查询用户信息。
比如:
select * from users where username='admin'
然后验证密码是否正确。
如果密码错误:登录失败。
如果密码正确,服务器会认为:“这个用户身份合法”
接下来就进入登录流程里最核心的一步。
四、Session 登录机制(传统网站常用)
很多传统网站使用的都是:Session 登录
它的核心思想其实很简单:服务器保存用户登录状态
比如:用户登录成功后。
服务器会:
- 创建一个 Session
- 给这个 Session 分配唯一 ID
例如:
SessionID = abc123456
然后:
服务器会把这个SessionID 返回给浏览器。
五、Cookie 开始出现
这里很多新人最容易混。
其实:
Cookie 只是浏览器里的“小纸条”
浏览器会自动保存:SessionID=abc123456
以后每次访问网站时:浏览器都会自动携带 Cookie。
例如:
Cookie: SessionID=abc123456
服务器看到这个 SessionID。
就知道:“哦,是之前那个已经登录过的用户”
于是用户就不需要反复输入密码了。
六、Cookie 和 Session 的关系
我之前一直容易把这两个搞混。
后来才慢慢理解:
其实:
Session 存在服务器
Cookie 存在浏览器
Cookie 里面通常保存的并不是用户信息。而是:SessionID
服务器真正的用户数据:还是保存在服务器内部。
七、JWT / Token 登录(现在很多网站都在用)
后来又出现了一种新的认证方式:JWT(JSON Web Token)
尤其现在:
- 前后端分离
- App
- 小程序
- API接口
非常常见。
JWT 和 Session 最大区别是:服务器不再保存 Session
而是:直接生成一个 Token 给客户端。
例如:eyJhbGciOi...
客户端自己保存。
以后请求时:主动携带 Token。
例如:Authorization: Bearer xxx
服务器验证 Token 是否合法。
如果合法:就认为用户已经登录。
八、为什么会出现 JWT?
因为 Session 有一些问题。
比如:
- 服务器压力大
- 分布式麻烦
- 多台服务器共享 Session 比较复杂
所以:
JWT 更适合现代项目。
九、RBAC 权限控制
登录成功以后,并不代表:用户能访问所有功能。
比如:
普通用户:只能看内容
管理员:
- 能删除数据
- 能进入后台
这里就会用到:RBAC(基于角色的权限控制)
简单理解:
用户→角色→权限
例如:
admin → 管理员 → 删除用户
user → 普通用户 → 浏览页面
服务器会根据角色判断:这个用户有没有权限访问某个资源。
十、这些知识为什么和 Web 漏洞有关?
学到这里我突然发现:
很多 Web 漏洞其实都和这些东西有关。
比如:
XSS
攻击者可以偷 Cookie。
如果 Cookie 里保存的是 SessionID。
攻击者可能直接冒充用户登录。
CSRF
浏览器会自动携带 Cookie。
攻击者就可能利用用户身份发起恶意请求。
越权漏洞
如果 RBAC 做得不好。
普通用户可能访问管理员接口。
十一、我目前对整个流程的理解
现在我会把整个 Web 登录理解成:
| HTTP | 负责通信 |
| Cookie | 保存身份标识 |
| Session/JWT | 负责认证 |
| RBAC | 负责权限控制 |
以前这些知识点是分散的,现在终于能串起来一点了。
十二、总结
对于刚学 Web 安全的人来说。
我感觉:不要只背概念。
一定要试着:“把整个流程串起来理解”
因为后面很多漏洞,本质上都是在利用:
- 身份认证
- 权限控制
- Cookie
- Session
这些机制。
我最近也准备开始继续学:
- XSS
- CSRF
- SQL 注入
后面应该也会继续整理学习笔记。
如果文章有理解不对的地方,也欢迎大家一起交流学习。
