文章目录
前端登录介绍
Cookie+Session
HTTP 是一种无状态的协议,客户端每次发送请求时,首先要和服务器端建立一个连接,在请求完成后又会断开这个连接。这种方式可以节省传输时占用的连接资源,但同时也存在一个问题:每次请求都是独立的,服务器端无法判断本次请求和上一次请求是否来自同一个用户,进而也就无法判断用户的登录状态。
为了解决HTTP无状态的问题,有了Cookie的出现。
有了Cookie之后,服务器端就能够获取客户端传过来的信息了,如果需要对信息进行验证,还需要通过Session。
登录验证过程
首次登陆时:
- 用户访问x.com,并输入密码登录。
- 服务器验证密码无误后,创建SessionId,并将它保存起来。
- 服务器端响应这个 HTTP 请求,并通过 Set-Cookie 头信息,将 SessionId 写入 Cookie 中。
后续登陆时:
- 用户访问x.com时,会自动带上第一次登录时写入的Cookie。
- 服务器比对Cookie中的SessionId和保存在服务器端的SessionId是否一样。
- 一样则成功登录
存在的问题
- 服务器端需要对接大量的客户端,也就需要存放大量的SessionId,导致服务器压力过大。
- 服务器端可能是一个集群,为了同步登录态,需要将SessionId同步到每一台机器,增加了服务器的维护成本。
- 由于 SessionId 存放在 Cookie 中,所以无法避免 CSRF 攻击。
Token登录
登陆验证过程
首次登陆时:
- 用户访问x.com输入账号密码,并点击登录。
- 确认无误后,创建Token。
- 服务器端将Token返回给客户端,由客户端自由保存。
后续登录时:
- 用户访问x.com,带上第一次登录时的Token。
- 服务器端验证Token,正确则验证成功。
Token生成方式
最常见的 Token 生成方式是使用 JWT(Json Web Token),jwt实际上就是一个字符串,它由三部分组成:头部Header、载荷Payload与签名Signature,这三个部分都是json格式。
- 头部:用于描述JWT最基本的信息。经过算法加密后形成字符串。
{ "typ": "JWT", "alg": "HS256"}
//在这里,我们说明了这是一个JWT,并且我们所用的签名算法是HS256算法。
- 载荷:可以用来放一些不敏感的信息。进行加密后得到字符串。
- 签名:将两个编码后的字符串连接在一起,提供一个密钥得到加密后的内容。再将签名也连接起来,就得到了完整的JWT。携带在url中。
特点
- Token不用存放在服务器端,减少服务器的压力。
- Token可以存放在前端任何地方,可以不用保存在Cookie中,提升页面安全性。
- 服务器端想收回Token权限不容易。
前端攻击方式
xss–跨站脚本攻击
xss全称是Cross Site Scripting,即跨站脚本攻击。恶意攻击者往 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。比如获取用户的 Cookie、导航到恶意网站、携带木马等。
xss攻击分类
XSS有三类:反射型XSS(非持久型)、存储型XSS(持久型)和DOM XSS。
- 反射型XSS
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。 - 存储型XSS
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。 - DomXSS
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
CSRF攻击
CSRF全称是Cross—Site Request Forgery,即跨站点请求伪造。 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF攻击攻击原理及过程
- 用户user访问受信任网站A,输入用户名和密码发出请求登陆网站。
- 用户通过验证后,网站A产生Cookie信息并返回给浏览器。
- 用户未退出网站A之前,在同一浏览器中,访问网站B。
- 网站B接受到用户请求后,返回一些攻击性代码,并发出请求要访问第三战点A。
- 浏览器接收到攻击性代码后,根据网站B的请求,在用户不知情得情况下携带Cookie访问网站A。导致网站B的恶意代码被执行。