一般来说sessionId有跨域安全问题,而token却没有,我的理解是sessionId怕跨域问题,而token不怕的原因是不是因为前者是基于cookie自动携带而后者是手动携带?当有跨域攻击时,受害者点击链接会自动带上浏览器cookie上的sessionId而token一般是程序员在程序中写ajax时,手动放在参数或者header中的,所以没有跨域安全问题?如果token也放在cookie里,会和sessionId一样出现跨域安全问题对不对?
那么像这种 https://blog.csdn.net/moshowg... zuul网关开放跨域应该没有安全问题吧?
3 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
基于cookie的认证都存存在跨越安全问题,不管是自动的方式还是手动的方式,只不过token的方式是通过和认证中心经过几次重定向,将token传递给了其他域,题主参考下sso的认证过程就知道了,oath的认证过程也差不多。
qq_笑_17
TA贡献1818条经验 获得超7个赞
不知道你说的跨域安全,是不是指CSRF?
如果是,那就先搞清楚csrf什么回事:
- 用户正常登录了A网站,生成了sessionid或者token
- 用户在未退出A时,访问了恶意站点B,B通过类似 <img src="A/xxx">的方式,偷偷以“用户身份”访问了A
再来看问题:
- 只要你登录了,就获得登录凭证(sessionid或token),这个凭证是你下次访问要传回给服务端的,所以,你要“保存”在客户端。
- 传统做法,sessionid是放在cookie的,这样,你下次访问,浏览器就会“自动带上”,但并不是“必须这样做的”。你了解session的原理后,sessionid同样可以放在header(甚至是get参数或post参数),只是这样,浏览器就不会自动带,需要你手工传了,这跟token放在header同一个道理。
- 回传的问题,通过src的方式隐藏调用,浏览器默认是会自动带上cookie的,但通过ajax调用默认好像是不带的(我写前端少,这个不确认)
所以,token放cookie其实有两层意思,一是保存在客户端cookie,二是 认证协议里的定义(传输方式)。 比如你将token放cookie了,但服务端认的还是header里的token,那你请求时自动在cookie里带上来的token是没有用的。
添加回答
举报
0/150
提交
取消