什么是 JWT
(json web tokens)
https://www.jianshu.com/p/576dbf44b2ae
常见攻击方式:
XSS(Cross Site Scripting):跨站脚本攻击
CSRF/XSRF(Cross-site request forgery):跨站请求伪造
- XSS攻击的主要目的则是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义。
- CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。预防措施,请求中加入随机数,让钓鱼网站无法正常伪造请求。
csrf 攻击无法获取第三方的 cookie,而是直接使用 cookie进行查询的时候会自动携带 cookie。
xss攻击通过代码注入可以获取 cookie。需要设置转义。
Token一般存储地址
特性 | Cookie | localStorage | sessionStorage |
数据的生命期 | 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 | 除非被清除,否则永久保存 | 仅在当前会话下有效,关闭页面或浏览器后被清除 |
存放数据大小 | 4K左右 | 一般为5MB | |
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | |
易用性 | 需要程序员自己封装,源生的Cookie接口不友好 | 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持 |
参考资料
https://www.cnblogs.com/minigrasshopper/p/8064367.html
Token防止攻击处理方式
- ip处理
- 全局变量处理(刷新后token可能会消失)
- 存储在localStorage,前端对token进行手动加密和解密
- 将tonken标记为http only 存储在cookie中, 这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie
- 设置 HTTPS,可以防止提交时的用户名或者密码被拦截或读取。