今天完成的事情:任务五深度思考,注册登录模块儿。
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不支持跨域名访问。
明天计划的事情:完成任务五
评论