发表于: 2021-08-30 23:07:17

4 1103


一,今天完成的事情

任务五深度思考;任务五希望补充的知识,内容。

任务4和任务5联系紧密,一起写任务总结。


1.JWT简单介绍   

1JSON Web TokenJWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。它由三部分组成,头部、载荷与签名。

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

流程上是这样的:

用户使用用户名密码来请求服务器

服务器进行验证用户的信息

服务器通过验证发送给用户一个token

客户端存储token,并在每次请求时附送上这个token

服务端验证token值,并返回数据

 

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

1,拦截器。一般工作在controller层。1)登录session验证。防止浏览器端绕过登录,直接进入到应用。或者session超时后,返回到登录页面。2)记录系统日志。一个完善的应用系统,应该具备监控功能,通过完善的系统日志记录系统运行过程中都经历了什么,当发生错误的时候及时通知管理人员,将损失降到最低。同时通过系统日志的监控,也能监控每次访问的响应时长,作为性能调优的参考。3)对请求进行前置或后置的操作。在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。

2filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。

3,监听器对项目起到监听的作用,它能感知到包括request(请求域)session(会话域)applicaiton(应用程序)的初始化和属性的变化。当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。

另外,我参考了:https://zhuanlan.zhihu.com/p/157715642

对比过滤器和拦截器比较全面的一篇文章。

 

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

1,明文:任何没有经过加密的信息。

2,密文:经过加密的内容。

3,明文保存密码有很大的信息安全隐患。一般数据库里还存有用户的姓名、联系方式、用户名等信息。一旦数据库发生泄漏,再加上用户的明文密码,攻击者就可以用用户名,密码,个人信息去其他网站尝试登陆(因为往往用户会将多个网站的密码根据习惯设成一样的)。

所有使用相同密码被登录的网站都会信息泄露,甚至被改密码。用户会被冒充做各种操作。

 

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

1,设置Cookie的失效时间:

如果Cookie没有设置expires属性,那么 cookie 的生命周期只是在当前的会话中,

关闭浏览器意味着这次会话的结束,此时 cookie 随之失效。

1)当设置的失效时间大于等于1天时,我们可以在 expires 属性后面直接输入XX天数

2)当设置的失效时间少于一天时:我们需要在当前的时间上加上失效时间。

3如果expires设置一个过去的时间点,那么这个cookie 会被立即删掉(失效)

2,不同浏览器间cookie总大小也不同。大概都是4M

多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

 

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

1token等方式也能解决用户身份识别问题。

2token一般存放在cookie中,如果是分布式可以保证不同服务器都能访问cookie。也可以存放在放在js的一个变量中。

3,在cookie中放入token。配置拦截器拦截cookie,从cookie里获取token来校验。

 

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

1,在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

2,加盐能够使明文密码被破解出来的概率降低。由于加了 Salt,即便数据库泄露了,但是由于密码都是加了 Salt 之后的散列,坏人们的数据字典已经无法直接匹配。

3,一种便利的加盐方法是md5(Password+UserName),即将用户名和密码字符串相加再MD5,这样的MD5摘要基本上不可反查。

每次保存密码到数据库时,都生成一个随机16位数字,将这16位数字和密码相加再求MD5摘要,然后在摘要中再将这16位数字按规则掺入形成一个48位的字符串。在验证密码时再从48位字符串中按规则提取16位数字,和用户输入的密码相加再MD5

 

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

1Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

2MD5不可逆。MD5计算,对原始消息(Message)做有损的压缩计算,无论消息(输入值)的长度字节是多少,是1亿字节、1个字节、还是0个字节,都会生成一个固定长度(128%2F16字节)的消息摘要(输出值)。信息丢失,导致在不知道原始消息的前提下,是无法凭借16个字节的消息摘要(Message+Digest),还原出原始的消息的。

MD5可以通过MD5Crack4等软件进行破解。软件通过算法生成字典,然后使用md5函数加密该字典中的值形成密文,接着跟需要破解的密文进行比较,如果相同则认为破解成功。目前网上有很多网站提供md5加密或者加密值查询,将加密后的md5值,输入到网站中,如果网站数据库中存在该md5,则该值对应的md5加密前的值就为密码。

 

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

1Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。

2,为什么要配置拦截器:通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。

3,拦截器校验请求。

4,编写一个拦截器(该拦截器作用是:判断用户是否登录并且权限是否足够)。

注册该拦截器。<mvc:interceptors>...

更改拦截器,返回信息给前端。

PrintWriter pw = response.getWriter();

        if (user == null) {

pw.write(JsonUtil.objToJson(ServerResponse.createByErrorCodeAndMessage(ResponseCode.NEED_LOGIN.getCode(), "拦截器拦截,请登录")));

        } else {

pw.write(JsonUtil.objToJson(ServerResponse.createByErrorCodeAndMessage(ResponseCode.ERROR.getCode(), "拦截器拦截,无权限操作")));

        }

 

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

1HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS HTTP 的基础下加入SSLHTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSLHTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTPTCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

2,问题应该问的是配置SSL证书。要得到SSL证书,而且不能是自己创建的不被浏览器认可的SSL证书。然后根据各服务器要求配置。

3,不希望被泄露的请求都需要httpshttps所有请求数据在网络传输中都是加密的。

4,登录密码需要保密,所以需要Httpshttps不是对http报文进行加密, 而是对传输数据进行加密, 最终还原http原始报文。

 

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

1,对称加密算法加密与解密用的都是同一个秘钥。

常见的对称加密算法有 DES3DESIDEARC5RC6AESBlowfish

在通用计算机中,相比非对称加密算法,对称加密算法效率会明显比较高。

适用场景:由于算法效率较高,一般用于对效率有要求的实时数据加密通信。比如在使用 VPN 或者代理进行加密通信时,既要保证数据的保密性,又要保证不能有高的延迟,所以通常会使用对称加密算法。

2,非对称加密算法(又称:公开密钥加密算法)。它需要两个密钥,一个是公钥,另一个是私钥,一个用于加密,另一个用于解密。如果其中一个密钥用于加密明文,则原始明文只能用对应的另一个密钥解密;即使最初用于加密明文的密钥也不能用作解密。因为加密和解密需要两个不同的密钥,所以称为非对称加密。

公钥的长度一般比较短,所以我们会将公钥对外公开,让别人使用公钥来加密数据。而我则使用私钥解密数据,但是切记基于非对称的特性,我们也是可以使用公开私钥加密,而使用公钥解密。不这样做的原因是因为私钥通常比公钥要长,传输起来比较费资源。

常见的非对称加密算法RSARabinRSA的特例)、椭圆曲线加密算法(英语:Elliptic Curve Cryptography, ECC)。使用最广泛的是RSA算法(由发明者RivestShmirAdleman姓氏首字母缩写而来)是著名的公开秘钥加密算法,ElGamal是另一种常用的非对称加密算法。

适用场景:主要用于秘钥交换,证书等场景。

 

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

1,如果是json web token,JWT,构造规则是: 头部(header)载荷(payload)签证(signature)。

2,让用户输入账号和密码,然后获得一个token(令牌),该token允许用户在不使用账号和密码的情况下访问特定的资源。一旦获得token,用户就获得了在一段时间内对特定资源的访问权限。

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。如果这个 Token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。

3,无法保证token完全不被偷窃,但是要尽量预防被盗窃。token的过期时间不宜太长,根据系统的安全需要,尽可能的短。token放在头部,并且用的是https,被盗风险比放在其它部位低。token在服务器端有状态,以增强安全性,确保用户注销时可控。使用二次认证来增强敏感操作的安全性。

 

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

1HTTP消息头。通过HTTP消息头,客户端与服务器端交换COOKIE信息。

2,不同的域、不同的路径下可以。否则会产生问题:Http请求中出现了两个同名Cookie,导致服务端获取到的错误的信息。Cookie不仅仅有名字和值两个属性,还有域(domain)、路径(path)等属性。其中,不同的域、不同的路径下可以存在同样名字的cookie。一般我们设置cookie的方法是用一个同样名字、一个值。这时就一定要搞清楚你要设置的cookie的域和路径,否则就会产生问题。

 

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

1在计算机中,尤其是在网络应用中,称为会话控制Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

2Cookie在计算机中一般指一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的特性, 因此它可以帮助我们实现记录用户个人信息的功能。

cookie 就是浏览器储存在用户电脑上的一小段文本文件。cookie 是纯文本格式,不包含任何可执行的代码。一个 Web 页面或服务器告知浏览器按照一定规范来储存这些信息,并在随后的请求中将这些信息发送至服务器,Web 服务器就可以使用这些信息来识别不同的用户。大多数需要登录的网站在用户验证成功之后都会设置一个 cookie,只要这个 cookie 存在并可以,用户就可以自由浏览这个网站的任意页面。再次说明,cookie 只包含数据,就其本身而言并不有害。

3,区别对比:

1)cookie数据存放在客户的浏览器上,session数据放在服务器上。

2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session

3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE

4)单个cookie在客户端的限制是3-4K,就是说一个站点在客户端存放的COOKIE不能超过3-4K大小。

5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中。

4,各自适用场景

1cookie

用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

只要添加了就一直存在,只要不是手动的去清除或者expires为默认的过期时间。但是安全性无法保证,而且也无法对客户的喜好进行定量的分析,有个数和长度的限制。

2session

对话的时效性的问题,如果客户选购商品的途中浏览器突然关闭,服务端找不到cookie中的sessionid了,那么选购的商品就不存在了

session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,

它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。

这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。



任务四和任务五小结

 

任务四是使用tiles,把数据库的数据加入到前端页面中。再次复习数据库,dao service controller。明白套页面的思想。明白前后端传递数据的套页面方式。

 

任务五做的是登录模块。使用加密。使用JWT,把这个token放入cookie。所以使用了cookietoken使用拦截器。

 

服务器验证客户用户名密码成功后,创建token服务器有了token后,放入cookie中,就把这个cookie起个名字叫token。第一次cookie发给客户端。客户端继续访问。cookie过期也不能正常访问被拦截器拦截的部分。token是否有效是parseJWT

但是这次任务不含退出,退出和前端配合,后端如果登录用token,就让现有生效token失效。

 

spring-mvc中配置拦截器有关,特别是告知拦截什么地址开头,用哪个类作为这个地址的拦截器。Interceptor就是拦截controller的。可以设置某些开头的网址才做处理。拦截器得到request中的cookies,写拦截放行逻辑,拿token名字的cookie,用JWT工具验证token有效情况。

 

 

问题,困惑,疑难:

 

任务四看tiles的页面怎么设置,公共部分。可以学习用tiles的页面处理动态代码的逻辑。

 

任务五没有写cookie续期的有关代码,如果没退出登录。因为用了cookie,所以没写JWT的过期时间,也没有在没退出登录,客户没有长时间不操作的时候让JWT续期。所以这个任务最重没有保持登录模块。



二,今天问题

况学长好,任务6对我有什么希望交待的吗?


三,今天的收获

拦截器,过滤器。深度思考问题。


四,明天的计划

任务6





返回列表 返回列表
评论

    分享到