发表于: 2020-06-18 22:37:00

1 1882


任务五深度思考:

1.JWT简单介绍

JSON Web Token(缩写 JWT)是一种跨域认证解决方案。

JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。

{

  "姓名": "张三",

  "角色": "管理员",

  "到期时间": "20187100"

}

以后,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。

 

服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。

 

2.拦截器、过滤器、监听器各有什么作用?

Filter

  Filter是一个可重复使用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一资源的响应。

 

Listener

  Listener是监听器,通过Listener可以监听Web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的来说就是在Application,Session,Request三个对象创建、消亡或者往其中添加、修改、删除属性时自动执行代码功能的组件。

 

Interceptor

  Interceptor是拦截器,在JavaWeb中主要是面向切面编程时使用,一般在调用一个方法前亦或是调用一个方法后执行该Interceptor拦截器中的方法。在JavaWeb中应用拦截器,比如说我们想得知一个完整请求的响应时间,我们就可以通过添加拦截器的方式,在请求开始前记录一个开始时间,在请求结束后,记录一个结束时间,用结束时间减去开始时间,即可获取该次请求所消耗的时间。这样以来就可以更加方便我们对于程序的优化处理。

 

 

3.什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?

明文(plaintext是加密之前的原始数据,密文是通过密码(cipher)运算后得到的结果成为密文(ciphertext)

为什么不能存明文?

a,防内贼

b,防拖库,泄露所有的密码

c,密文泄露了短时间内也无法破译出明文

 

4.Cookie的失效时间怎么设定?最大允许存放多少字节?

设定 maxAge-1 浏览器关闭即清空,0 失效, 正数 有效时间单位为秒)

最大 4K 4096 Bytes

 

5.在App中没有Cookie,怎么解决用户身份识别的问题?Token应该放在什么位置?怎么在后端设计的时候,又支持Cookie,又支持Token?

token

token 放在 url 后面作为参数、写入 header 或者 post主体。

没有搜索到怎么做到同时支持 cookie token,一拍脑袋自己想一个,就是 cookie 里面也存上 token,拦截器拦截到有 cookie 就校验 cookie 里的 token,否则就校验 url 或者 header 里面的 token

 

6.什么叫加盐?加盐能解决什么问题?通常的加盐方式有哪些?

加密明文之前往密文掺杂一些随机字符串的方式称为加盐。

解决的问题:

a,相同的明文密码加密后密文一致

b,一般的密文可能被查表破解

加盐的方式:

a,加密前生成随机字符串与密码一起加密,数据库存储密文与盐值

b,使用 BCrypt,加密的时候密文即带盐,不用另外存储盐值

 

7.什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

虽然无法直接从密文还原明文,但是相同的明文 md5 之后密文相同,有可能通过查表的方式破解。

 

8.拦截器是什么?为什么要配置拦截器?拦截器里通常应该校验什么,怎么做到统一配置拦截器,让必须登录才能使用的接口,判断用户未登录时,返回错误信息?

为什么要配置拦截器?

拦截器体现了 面向切面编程的思想,经常需要对很多请求做同样的处理,拦截器可以在请求到达 controller view 的前后三处时间点对请求进行处理,这些处理我们也可以写在 controller 里面,拦截器是对这类操作的一个抽象。

在配置文件中配置拦截器:

<mvc:interceptors>

<mvc:interceptor>

<mvc:mappingpath="/check.html"/>

<beanclass="cn.mogeek.util.LoginInterceptor"/>

</mvc:interceptor>

<mvc:interceptor>

<mvc:mappingpath="/u/**"/>

<beanclass="cn.mogeek.util.UserInterceptor"/>

</mvc:interceptor>

</mvc:interceptors>

 

然后实现 HandlerInterceptor 接口写好对应的操作。

 

9.Https是什么?怎么配置Https证书,哪些请求需要Https,登录是否需要Https?

超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLSHTTP over SSLHTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

所有隐私数据的传输都应该使用 https,登录也应该使用 https

 

10.什么是对称加密,什么是非对称加密?分别适用于什么场景?

对称加密:加解密用同一个密钥。

非对称加密:公钥加密只有私钥能解开。

 

对称加密速度快,密钥可以短一点,常用的场景有文件加密。

非对称加密公私钥在数学上相关联,需要密钥长一点,加解密速度比较慢。常见应用有邮件加密。

 

11.Token的构造规则是什么,怎么确认用户身份的,怎么保证Token被偷窃的问题?

Token 没有具体的构造规则,不过现在讲 token 应该都指的是 JWT 规范的 token

JWT 规范:

JWT token 分为三段:headerpayloadsignature

Header 指定加密方式,token 类型

Payload 是载荷,用来校验的部分

Signature 是对前两者的签名,用来给服务器校验数据没有被修改

 

需要注明的是 JWT 规范中并不对 payload header 进行严格加密,数据可以被第三方读取,不宜存入隐私信息。

 

如果 jwt 类型的 token 被盗,服务器是校验不出来是否被盗的,按照规范服务器会一直通过这个 token 的请求,所以说 jwt 规范并不是用来做安全认证的,它能做到的就是确认这个 token 的内容有没有被篡改。

当然后端可以做一些其他的事情,比如 token 加入时间戳,超过 2 秒即失效。减少被盗用的风险。

 

12.Cookie是在Http的什么位置存放,Cookie里的键可以重复吗?

F12 看了一下,存储在 http 响应头的 cookie 字段里面。

键可以重复,只要除了valuemaxAge之外的参数不完全重复 cookie 就不会被覆盖。

 

13.什么是session?什么是cookie?session和cookie有什么区别?什么场景适用于session?什么场景适用于cookie?

session 会话,内容存储在服务器上,session id 一般存储在 cookie 里,可以以放在 url 后面。

cookie:服务器给客户端下发的一小段文本,存储在客户端,安全性主要由客户端保证。

 

内容小,隐私性强的信息保存在 session 比较好。其他的可以放在 cookie 里。

 


今天花了比较多的功夫比较 jwt 与 cookie-session 的优劣,目前我看到的有以下几点比较重要:

优点:

atoken 的方式不会被浏览器自动塞到请求里,也就没有了 CSRF 校验的需求了。

b,苹果手机浏览器、原生应用不支持 cookie,当然我们也可以用 session,但是 session 需要服务器存储,token 不用,服务器只做校验与分发。

 

特性(或者说缺点):

a,客户端的每个 token 都需要自己加密后发出来

btoken 内部不能存储隐私信息(就像 cookie 一样),即使加密也比不上 session 的安全性,session 也许会被利用,但永不会被泄露。

c,一旦分发出去,除非过期或者服务器增加拦截的逻辑,否则无法使其失效。

 



返回列表 返回列表
评论

    分享到