究竟什么是token? 工作原理是什么 token是平台的功能,还是一种解决方案 具体如何使用?

  • 究竟什么是token?工作原理是什么
  • token是平台的功能,还是一种解决方案
  • 具体如何使用?

最近纠结了好久这个问题,因为移动端和服务器的互联,导致登录的时候出现了很多的问题,绝大部分转自别人之手,希望可以给大家带来帮助。

'token' 是一个单词 ……

好吧,其实你应该问的是“CSRF”的原理与防范,这个你可以自己去找相关资源。

简单来说,考虑一种简单情况,你登录了 A 站,然后我给你发了一个网址 ,你点击之后,进入了这个 B 站的某个页面。

这个页面会干一个坏事,它直接发了一个“修改密码”的请求到 A 站。因为这时,在当前浏览器,你在 A 站是已登录状态,所以,这个从 B 站页面出去的请求会带上相关 cookie ,并且成功修改掉你的密码。这个就叫 CSRF ,跨域请求伪造。

那么怎么防范这类伪造请求呢?

Token, Referer 检查,验证码 等都是办法,Referer 检查会有一些问题,比如配合 XSS 它就没用了,头被修改了等。

Token 和 验证码的方式本质上是一样的,但是验证码还要让用户确认一下,在大多数场景下不适合(修改密码还可以让用户输入验证码,你不能做成提交任何一个表单都让用户填验证码吧)。

上面说的“本质”,就是指服务端要防 CSRF ,就需要验证一个 B 站不可能知道,只有 A 站知道的信息。(验证码当然算一个), token 就是 B 站不知道,而 A 站知道的信息。

好吧,到这里,如果你有点基础,可能会想到,那我在 session 中存一个 token ,然后渲染模板时放到页面中,没问题,这样是可行的。但是太麻烦。

简单的方法,其实只需要在响应时把 token 的值随便写到一个 cookie 就好了,同时页面上也放一个。这样,如果你本来就是 A 站页面,请求时自然可以带上正确的 token ,非 A 站页面,它是拿不到这个值的(B 站的一个页肯定不能在浏览器中拿到 A 站的 cookie 啊)。

服务器在验证请求时,只需要拿请求数据和 cookie 数据作一下比对即可,连后端的持久化存储都不需要用到。

(此部分引自https://segmentfault.com/q/1010000010735317

猜你喜欢

转载自blog.csdn.net/qq_41756576/article/details/81329123