前端同学对于token安全的一些疑问

前端在用户登录后获得后端传来的token储存在本地(localStrong、cookie或者内存中)
假设A获得B的token,那调取接口时A带上B的token不就可以冒充B了,是这样吗?

阅读 11.1k
8 个回答
新手上路,请多包涵

对于服务端来说token只是一个代号而已,一般来说后端会有鉴权的,也就是会对每一个接口数据进行一些校验。

是的 就算是session机制 你也只要把B的session_id带上 就能冒充B

仅以单页应用为例:
先使用用户名、密码、验证码等进入授权URL获取token,获取到token之后跟后台建立连接继而可以获取数据

  1. 一般来说此token是不会往cookie以及localStorage等地方存储的,仅仅放在全局变量中,这时候你换账号登录就没办法获取到了,仅仅限于当前页面且在不刷新的情况下使用;
  2. 如果将token存储在可见区域如localStorage,那么是以什么目的呢?记住用户名与密码这种? A登录的时候后台仅仅验证token的话,那确实是可以登录的,网站对安全性没有要求其实无所谓。如果网站要求高,你的token就不能存储成明文了,需要手动加密解密

别人能拿到你的token,的确可以伪装你登录,但是你能拿的到别人的token那就是个问题,要不就是熟人作案,要不就是你的电脑满身是毒了。

token就相当于你浏览器当前会话的身份证哈,token一般是有过期时间的,一般来说是半个小时,如果你的身份证被盗了,半小时内确实是可以伪装成你去请求A网站的。不过一般能盗你token也挺难的。

CSRF(Cross Site Request Forgery, 跨站域请求伪造)就是使用类似的漏洞进行攻击的。

攻击实例

  1. 用户A使用浏览器b访问网站w1,w1跟b建立会话s
  2. A点击w2,w2会在A没有感知的情况下利用s向w1发送请求r
  3. 请求r可以是删除A在w1上的资料、转移A在w1上的虚拟资产

是这样啊,拿到了token确实可以请求啊。但是一般都有时效性,一定时间内能用;还有有些公司人家会验证是否常用IP请求啊 这些来达到验证的目的;就假设我给你token了,但是token里面我有IP加密的,你换个地方去登录就登不了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题