发表于: 2020-06-19 17:09:04

1 1419


今天完成的事情:任务五深度思考,注册登录模块儿。

1.JWT(json web token)简单介绍 

JWT将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

优点:分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。

缺点:无法作废已颁布的令牌/不易应对数据过期

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

拦截器(Interceptor)

过滤器(Filter)

监听器(Listener)

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

明文:没有进行过任何加密的信息

密文:经过加密的信息。密文的设计初衷是为了提高用户的密码的安全性,如果你的密码不经过加密,那在一些场景登录的过程中可能直接将密码附加在url后面,此时一旦被第三方截取url,那密码的作用就没有了。

为了数据的安全所以不允许在数据库里明文保存密码,举几个栗子

2017年10月,雅虎发布公告称,在2013年的数据泄露事件中,有大概30亿笔帐号(包含当时雅虎所有的用户)泄露,而不是之前所估计的10亿笔,数据泄露的影响范围远超过此前的估计。 


2017年3月,美国求职网站America’s JobLink(AJL)爆发了一起重大数据泄露事件,影响到美国十个州的众多求职者。在本起事件中,一名黑客利用AJL应用程序的一个漏洞窃取了480万笔求职者的数据,暴露的数据包括求职者姓名、生日和身份识别号码。


2017年11月,Uber主动公开了去年发生了一起严重的数据泄露事件,据悉,黑客通过外部代码托管网站GitHub获得了Uber在AWS上的账号和密码,从而盗取了5700万乘客的姓名、电子邮件和电话号码,以及约60万名美国司机的姓名和驾照号码。为了隐瞒此事件,Uber曾向黑客支付10万美元封口费。


2017年11月,媒体发布消息称,趣店百万学生的数据疑似外泄,泄露的数据出包括借款金额、滞纳金等金融数据外,甚至还包括学生父母电话、男女朋友电话、学信网账号密码等隐私信息。据称,此次数据泄露事件有可能是内鬼所为,内部人员主动泄露这些数据以进行报复。


2013年10月,国内安全漏洞监测平台披露,为全国4500多家酒店提供数字客房服务商的浙江慧达驿站公司,因为安全漏洞问题,使与其有合作关系的酒店的入住数据在网上泄露。数天后,一个名为“2000w开房数据”的文件出现在网上,其中包含2000万条在酒店开房的个人信息,开房数据中,开房时间介于2010年下半年至2013年上半年,包含姓名、身份证号、地址、手机等14个字段,其中涉及大量用户隐私,引起全社会广泛关注。

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

(1)默认cookie失效时间是直到关闭浏览器,cookies失效

(2)保留Cookie一个小时:

Response.Cookies("CookieName").Expires= (now()+1/24)  或者
Response.Cookies("CookieName").Expires = DateAdd("h", 1, Now())

(3)保留Cookie60个月

Response.Cookies("CookieName").Expires=DateAdd("m",60,now())

(4)在Expires后面定义的时间可以用时间函数代替

Response.Cookies("CookieName").expires=second()+7 表示现在的时间加7秒   date()+7是加7天

推荐使用

Response.Cookies("CookieName").Expires = DateAdd("h", 1, Now())

参数含义:s 秒,n 分钟,h 小时,d 天 ,m 月 ,  

(5)封杀ip,同一个ip不能多次执行

Function killip(cook,cooktime)

(6)每个浏览器允许的cookie存放字节不一样

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

APP中使用token识别用户身份

token应该放在header,  或者url里(安全系数低,不能泄露url)

把token放在cookie中,就可以两者都支持

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

盐是一串数字,完全是自己定义的

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

加盐可以为用户的个人信息提供一个保障,可以为数据库的明文加密,降低数据泄密几率

加盐方式:

md5(md5(password) + salt)

第一步  加盐

 

**

 * 生成随机盐

 */

public static String randomSalt()

{

    // 一个Byte占两个字节,此处生成的3字节,字符串长度为6

    SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();

    String hex = secureRandom.nextBytes(3).toHex();

    return hex;

}

 

第二步  根据用户名 密码  随机盐 生成加密后的密文

 

public String encryptPassword(String username, String password, String salt)

{

    return new Md5Hash(username + password + salt).toHex().toString();

}

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

MD5是一种消息摘要算法,一般用于互联网一种数据的唯一性标识。

MD5虽然是不可逆的,但是可以通过彩虹码等进行破解

所以为了解决MD5安全性不高的问题,我们采取加盐的方式和HMACMD5(加密匙)方式来使用

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

 拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作

配置拦截器可以拦截需要登录才能使用的接口

拦截器通常校验什么:比如判断登录,验证权限,记录日志等

<mvc:mapping path = "/u/**"/>

拦截所有包含/u的url路径

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

HTTPS(HypertextTransfer Protocol Secure)即安全的HTTP

HTTP是一个传输网页内容的协议,但是是明文传输的。而HTTPS就是在HTTP上加了一层安全协议

HTTP变为HTTPS中间需要一个安全协议即SSL/TLS,SSL和TLS是同一个东西的不同阶段

配置Https证书

需要一张CA(Certificate Authority )也就是证书授权中心颁发的 SSL 安全证书,然后将他部署到网站服务器上,部署成功后前缀就会变成https

然后我发现  有锁的有证书,没锁的没有证书                                                      

      

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

(1)对称加密

加密和解密使用相同的密钥加密。只有一把密钥作为私钥,所以效率很高

优点:算法简单,加密解密容易,效率高,执行快。

缺点:相对来说不算特别安全,只有一把钥匙,密文如果被拦截,且密钥也被劫持,那么,信息很容易被破译。

适用场景:保密性要求不高,请求频繁的业务

(2)非对称加密

加密和解密使用两把密钥加密,一把作为公开的公钥,另一把作为私钥。

公钥加密的信息,只有私钥才能解密。

私钥加密的信息,只有公钥才能解密。

私钥永远在自己手里,非常安全,黑客拦截也没用,因为私钥未公开。

优点:安全,即使密文被拦截、公钥被获取,但是无法获取到私钥,也就无法破译密文。作为接收方,务必要保管好自己的密钥。

缺点:加密算法及其复杂,安全性依赖算法与密钥,而且加密和解密效率很低。


适用场景:要求安全级别很高的业务

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

Token 没有具体的构造规则,现在讲 token 指的是 JWT 规范的 token,是自定义的。

自定义的token中必须有能识别用户信息的内容,比如用户id以及Token生成时间

防止Token被偷窃

1、在存储的时候把token进行对称加密存储,用时解开。

2、将请求URL、时间戳、token三者进行合并加盐签名,服务端校验有效性。

3、在网络层面上token明文传输的话会非常的危险,所以要使用HTTPS,并且把token放在post body里。

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

存储在 http 响应头的 cookie 字段里面。

Cookie里的键不能重复,不然第二个相同的key会把前一个key的value覆盖掉。  

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

session:Session的定义很抽象,在不同的场合中session一词的含义也很不相同.它可以代表服务器与浏览器的一次会话过程,指从一个浏览器窗口打开到关闭的这个期间.也可以用于指一类用来在客户端与服务器之间保持状态的解决方案.

cookie:

Cookie 是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web服务器保存在用户浏览器(客户端)上的小文本文件(内容通常经过加密),它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie 信息,可以看作是浏览器缓存.

区别:

1、存储位置不同

cookie的数据信息存放在客户端浏览器上。

session的数据信息存放在服务器上。

2、存储容量不同

单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。

对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。

3、存储方式不同

cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。

session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。

4、隐私策略不同

cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。

session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。

5、有效期上不同

开发可以通过设置cookie的属性,达到使cookie长期有效的效果。

session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。

6、服务器压力不同

cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。

session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。

7、浏览器支持不同

假如客户端浏览器不支持cookie:

  cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。

  运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。

假如客户端支持cookie:

  cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。

  session只能在本窗口以及子窗口内有效。

8、跨域支持上不同

cookie支持跨域名访问。

session不支持跨域名访问。

明天计划的事情:完成任务五


返回列表 返回列表
评论

    分享到