首页 > 其他分享 >token(面试题)

token(面试题)

时间:2022-10-31 22:25:13浏览次数:50  
标签:XSS 面试题 存储 token 用户 Token localStorage cookie

Token一般是存放在哪里? Token放在cookie和放在localStorage、sessionStorage中有什么不同?

oken是什么?
Token 存放位置
Token 放在 cookie、localStorage、sessionStorage中对不同点?
总结

一、Token是什么?

Token 其实就是访问资源对凭证。一般是用户通过用户名和密码登录成功之后,服务器将登录凭证做数字签名,加密之后得到的字符串作为token。

二、Token存放位置

Token 其实就是访问资源对凭证。一般是用户通过用户名和密码登录成功之后,服务器将登录凭证做数字签名,加密之后得到的字符串作为token。

它在用户登录成功之后会返回给客户端,客户端主要以下几种存储方式:

1、存储在localStorage中,每次调用接口的时候都把它当成一个字段传给后台

2、存储在cookie中,让它自动发送,不过缺点就是不能跨域

3、拿到之后存储在localStorage中,每次调用接口的时候放在HTTP请求头的Authorization字段里面。token 在客户端一般存放于localStorage、cookie、或sessionStorage中。

三、Token 放在 cookie、localStorage、sessionStorage中的不同点?


3.1 将Token存储于localStorage或 sessionStorage


Web存储(localStorage/sessionStorage)可以通过同一域商Javascript访问。这意味着任何在你的网站上的运行的JavaScript都可以访问Web存储,所以容易受到XSS攻击。尤其是项目中用到了很多第三方JavaScript类库。

为了防止XSS,一般的处理是避开和编码所有不可信的数据。但这并不能百分百防止XSS。比如我们使用托管在CDN或者其它一些公共的JavaScript库,还有像npm这样的包管理器导入别人的代码到我们的应用程序中。

如果你使用的脚本中有一个被盗用了怎么办?恶意的JavaScript可以嵌入到页面上,并且Web存储被盗用。这些类型的XSS攻击可以得到每个人的Web存储来访问你的网站。

这也是为什么许多组织建议不要在Web存储中存储任何有价值或信任任何Web存储中的信息。 这包括会话标识符和令牌。作为一种存储机制,Web存储在传输过程中不强制执行任何安全标准。

XSS攻击:Cross-Site Scripting(跨站脚本攻击)简称XSS,是一种代码注入攻击。攻击者通过在目标网站注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可以获取用户的敏感信息如Cookie、SessionID等,进而危害数据安全。


3.2 将Token存储与cookie

优点:可以制定httponly,来防止被JavaScript读取,也可以制定secure,来保证token只在HTTPS下传输。

缺点:不符合Restful 最佳实践。 容易遭受CSRF攻击(可以在服务器端检查Refer和Origin)

CSRF:跨站请求伪造,简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如:发邮件、发信息、甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证职能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出去的。CSRF并不能够拿到用户的任何信息,它只是欺骗用户浏览器,让其以用户的名义进行操作。

总结

关于token 存在cookie还是localStorage有两个观点:

支持Cookie的开发人员会强烈建议不要将敏感信息(例如JWT)存储在localStorage中,因为它对于XSS毫无抵抗力。

支持localStorage的一派则认为:撇开localStorage的各种优点不谈,如果做好适当的XSS防护,收益是远大于风险的。

放在cookie中看似看全,看似“解决”(因为仍然存在XSS的问题)一个问题,却引入了另一个问题(CSRF)
localStorage具有更灵活,更大空间,天然免疫 CSRF的特征。Cookie空间有限,而JWT一半都占用较多字节,而且有时你不止需要存储一个JWT。

 

 


————————————————
版权声明:本文为CSDN博主「菜鸟是大神」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wufaqidong1/article/details/126351552

标签:XSS,面试题,存储,token,用户,Token,localStorage,cookie
From: https://www.cnblogs.com/LIXI-/p/16846049.html

相关文章

  • 使用JS创建一个类(面试题)
    1.利用对象字面量创建对象<body><script>varobj={name:'javascript',age:18,sex:'undefined',express:function(){varsent=window.prompt("请你输入你......
  • 肖sir__杭州java面试题____归纳(1)
    1.有用过Java做什么2.用了Java什么框架3.Java spring知道吗?4.Java里面的bean知道是什么吗5.Java的IOC知道吗6.Java的springboot中用什么注解可以变成一个服务7.springboot......
  • Vue面试题
    1、Vue的生命周期?beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed(创建、挂载、更新、卸载)挂载中可以操作DOM,创建中不......
  • 框架面试题
    1.请简述mybatis加载mapper的映射文件的三种方式第一种:(包扫描)         通过资源路径的加载,利用mapper标签的resource的属性进行资源路径加载第二种:(引用......
  • syntax error near unexpected token `do
    问题:不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。如果是上述的,则行结尾会是^m,需要转换成linux/unix格式......
  • 这个面试题居然从11年前就开始讨论了,而官方今年才表态。
    大家好,我是歪歪。这期给大家盘一个面试题啊,就是下面的第二题。这个面试题的图片都被弄的有一点“包浆”了。所以为了你的观感,我还是把第二道题目手打一遍。啧啧啧,这行......
  • 面试题:如何让Servlet变成多例?
    方法1.实现 SingleThreadModel接口(不推荐,官方已经将这个接口废弃)publicclassMyServletextendsHttpServletimplementsSingleThreadModel{publicMyServlet(){......
  • vue 项目优化解决方案(面试题)
    vue项目优化解决方案?1.使用mini-css-extract-plugin插件抽离css2.配置optimization把公共的js代码抽离出来3.通过Webpack处理文件压缩4.不打包框架、库文......
  • 如何清除浮动?(面试题)
    如何清除浮动1、浮动是什么:浮动是将元素块脱离普通文本流,使其漂浮在普通文本流之上,直到碰到内容框或者上一个浮动元素的边框;2、浮动会带来的问题:1)父元素框不能被撑开;2)没有......
  • Java面试题(一)
    1、什么是自动装配,有哪些方式spring会自动中上下文中寻找并给bean装配与其相关的属性自动装配方式1、byName:把与bean的属性具有相同名字的其他b......