cookie 和 token 都存放在 header 中,为什么不会劫持 token?

cookie:登录后服务端生成的sessionid,并在http请求里返回到客户端,同时服务端保存sessionid,以后客户端的每次http请求都带上cookie(sessionid),服务端会获取cookie(sessionid)然后验证用户的身份。所以拿到cookie就拿到了sessionid,就可验证通过。同时浏览器会自动携带cookie;

token:同样是登录后服务端返回一个token,客户端保存起来,在以后http请求里手动的加入到请求头里,服务端根据token 进行身份的校验。浏览器不会自动携带token。

CSRF 跨站点请求伪造:通过浏览器会自动携带同域cookie的特点。cookie的传递流程是用户在访问站点时,服务器端生成cookie,发送给浏览器端储存,当下次再访问时浏览器会将该网站的cookie发回给服务器端

如果用户登陆了A网站,拿到了cookie,又点击了恶意的网站B。

B收到请求以后,返回一段攻击代码,并且发出一个请求给网站A。

浏览器会在用户不知情的情况下,根据B的请求,带着cookie访问A。

由于HTTP是无状态的,A网站不知道这个请求其实是恶意网站B发出的,就会根据cookie来处理请求,从而执行了攻击代码。

而浏览器不会自动携带 token,所以不会劫持 token。

XSS:跨站脚本工攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击

cookie和token都是不安全的

token和cookie的区别

HTTP协议本身是无状态的,所以需要一个标志来对用户身份进行验证

1、cookie

用户登录成功后,会在服务器存一个session,同时发送给客户端一个cookie,这个cookie里面有唯一标识该用户的sessionID

数据需要客户端和服务器同时存储

用户再进行请求操作时,需要带上cookie,在服务器进行验证

cookie是有状态的

2、token

用户进行任何操作时,都需要带上一个token

token的存在形式有很多种,header/requestbody/url 都可以

这个token只需要存在客户端,服务器在收到数据后,进行解析

token是无状态的

token相对cookie的优势

1、支持跨域访问 ,将token置于请求头中,而cookie是不支持跨域访问的;

2、无状态化, 服务端无需存储token ,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session;

3、 无需绑定到一个特殊的身份验证 方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可;

4、 更适用于移动端 (Android,iOS,小程序等等),像这种原生平台不支持cookie,比如说微信小程序,每一次请求都是一次会话,当然我们可以每次去手动为他添加cookie,详情请查看博主另一篇博客;

5、 避免CSRF跨站伪造攻击 ,还是因为不依赖cookie;

6、 非常适用于RESTful API ,这样可以轻易与各种后端(java,.net,python…)相结合,去耦合

cookie 和 token 都存放在 header 中,为什么不会劫持 token?____token和cookie的区别相关推荐

  1. 怎样把DataGrid存放在ViewState中的无用数据卡掉

    作者:无间道的博客http://www.cnblogs.com/wangsaokui/articles/10031.html 怎样把 DataGrid 存放在 ViewState 中的无用数据(有时候 ...

  2. VB:编一个子过程DeleStr(s1,s2),将字符串s1中出现的s2子字符串删去,结果存放在s1中

    题目来源:大工慕课 链接 原题:Visual Basic程序设计教程(第二版)龚沛曾主编,高等教育出版社 实验6-8 作者:Caleb Sung 题目要求 编一个子过程DeleStr(s1,s2),将 ...

  3. 用编程求FFFF:0到FFFF:F字节型数据的和,结果存放在dx中

    一.代码 assume cs:codecode segment ; 用编程求FFFF:0到FFFF:F字节型数据的和, ;结果存放在dx中;1.做好初始化.即使默认为0 ;2.注意数据从哪里来,到哪里 ...

  4. 设计程序,从键盘输入十进制数,结果存放在BUFFER中(无符号数,16位),再把结果以十六进制方式在屏幕输出。

    只为记录汇编作业 题目:设计程序,从键盘输入十进制数,结果存放在BUFFER中(无符号数,16位),再把结果以十六进制方式在屏幕输出. 例如:若键盘输入: 65534:则转换完,屏幕输出:FFFE 代 ...

  5. IMXRT1052/1064 如何将代码存放在ITCM中

    IAR中将代码全部放在ITCRAM中执行 ① 修改启动文件,添加一个新的中断向量表(具体代码可以查看例程中example例程). ② 修改分散加载文件,将新的中断向量表放到ITCRAM中 ③ 修改分散 ...

  6. 解决OAth2.0的授权token放在header中,导致文件下载验证失效的问题

    1.项目背景 项目是采用微服务架构,使用spring gateway作为网关,统一做校验权限 2.问题 OAth2.0的授权token是放在请求头Authorization中的,如果使用浏览器直接下载 ...

  7. 求出data为首地址的100D字数组中的最小偶数,并把它存放在AX中,目前只能做出无符号数,有待修改

    DATAS SEGMENT;此处输入数据段代码 ARRAY DW 4,5,6,7,8,9,3,6,1,10,34,12,45,58,6,32,15,17,20,'$' Z DB 100,10 DATA ...

  8. go mod引用git仓库中的包:拉取存放在gitee中的package

  9. php token放到head,我觉得把 Token 放在 Header 里更好一些

    如教程中 Token 在 Response body 中进行传递,并且把 Token 的替换单独做了一个路由.这种方式我觉得对于客户端来说很不友好. 我觉得应该将 Token 放在 Header 中进 ...

最新文章

  1. Hyperledger Fabric PHP SDK
  2. python单行箭头_python – 如何在matplotlib的曲线末端放置一个箭头?
  3. Limesurvey-2.55 (Ubuntu 16.04)
  4. Bitcoin 中的挖矿算法(2) 难度值说明
  5. python购物车程序2019_Python——购物车程序(列表的应用)
  6. Vue 父子组件间的通信
  7. SQL(八)- python执行SQL语句
  8. 火狐浏览器如何禁止网站发消息 火狐浏览器禁止网站发消息的方法
  9. maven deploy distributionManagement
  10. 腾讯IVWEB前端工程化工具feflow思考与实践
  11. php 仿电脑桌面系统,EonerCMS——做一个仿桌面系统的CMS(十-附最新源码)
  12. PyTorch 1.8 发布,支持 AMD,优化大规模训练
  13. php tableau,Tableau函数
  14. IEC62304-2006解读
  15. 自己做网站需要考虑的问题
  16. boost斩波电路控制系统C语言,Boost升压斩波电路[精华]
  17. SVG霍比特人电影标题样式
  18. python自动办公 pdf_别再问如何用 Python 提取 PDF 内容了!
  19. 脑机接口中的流形嵌入知识迁移学习
  20. 推荐人工智能编程的必读书籍

热门文章

  1. win7 php zend,win7系统打开WZend Studio PHP出错的解决方法
  2. android悬浮功能实现,Android实现系统级悬浮按钮
  3. [转载] Java——toArray,集合转换为数组
  4. [转载] Java标识符 数据类型 常量与变量
  5. 分区 主分区 和 扩展分区_等和分区
  6. java 方法 示例_Java扫描仪具有示例的NextNextInt()方法
  7. 请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇
  8. 计算机专业技能高考试题素材,计算机技能高考模拟试题
  9. 一文玩转 EhCache 缓存框架!
  10. Centos7安装Postgresql 13 详细步骤(远程连接)