七张图看懂 Web 登录全过程:HTTP、Cookie、Session、JWT、RBAC 全串起来了
终于搞懂 Web 登录全流程了HTTP、Cookie、Session、JWT、RBAC 最近一直在学 Web 安全相关的基础知识前面陆续学了HTTPCookieSessionJWTRBAC但是我发现一个问题这些东西单独看好像都懂了但真正到了“网站登录”这个场景里又容易乱。所以今天我试着把整个 Web 登录流程串起来顺便也记录一下自己的学习理解。如果你和我一样是刚开始学 Web 安全希望这篇文章能帮你把这些知识真正连起来。先给大家看一下web完整流程的总览图一、我们登录网站时到底发生了什么比如我们打开一个网站。输入用户名密码然后点击登录。看起来只是简单的一步。但实际上浏览器和服务器之间已经开始了一整套通信流程。二、HTTP 请求开始首先浏览器会通过 HTTP 请求把账号密码发送给服务器。一般使用的是POST /login HTTP/1.1因为登录属于提交数据。这里通常会把usernamepassword放到请求体里面。简单理解就是浏览器 → 服务器“我想登录这是我的账号密码”三、服务器验证账号密码服务器收到请求以后会去数据库查询用户信息。比如select * from users where usernameadmin然后验证密码是否正确。如果密码错误登录失败。如果密码正确服务器会认为“这个用户身份合法”接下来就进入登录流程里最核心的一步。四、Session 登录机制传统网站常用很多传统网站使用的都是Session 登录它的核心思想其实很简单服务器保存用户登录状态比如用户登录成功后。服务器会创建一个 Session给这个 Session 分配唯一 ID例如SessionID abc123456然后服务器会把这个SessionID 返回给浏览器。五、Cookie 开始出现这里很多新人最容易混。其实Cookie 只是浏览器里的“小纸条”浏览器会自动保存SessionIDabc123456以后每次访问网站时浏览器都会自动携带 Cookie。例如Cookie: SessionIDabc123456服务器看到这个 SessionID。就知道“哦是之前那个已经登录过的用户”于是用户就不需要反复输入密码了。六、Cookie 和 Session 的关系我之前一直容易把这两个搞混。后来才慢慢理解其实Session 存在服务器Cookie 存在浏览器Cookie 里面通常保存的并不是用户信息。而是SessionID服务器真正的用户数据还是保存在服务器内部。七、JWT / Token 登录现在很多网站都在用后来又出现了一种新的认证方式JWTJSON 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 安全的人来说。我感觉不要只背概念。一定要试着“把整个流程串起来理解”因为后面很多漏洞本质上都是在利用身份认证权限控制CookieSession这些机制。我最近也准备开始继续学XSSCSRFSQL 注入后面应该也会继续整理学习笔记。如果文章有理解不对的地方也欢迎大家一起交流学习。