1.前端js代码对输入框的数据进行校验
2.完成校验的password在前端使用js函数进行第一次md5,加密,通过ajax,把数据封装为loginVo传给后端。
3.后端拿到分装为loginVo的对象,对他进行参数的验证,加了一个自定义的校验器
4.经过验证之后,调用登录的方法,拿出loginVo中的手机号,去查找redis中是否有缓存
5.redis中有缓存则直接拿出来缓存的user对象
6.把传入的密码加上从取出的对象那里拿到的数据库salt进行第二次md5,对照取出的对象的密码
7.相同则验证成功,生成一个uuid作为token,token放到cookie中给客户端,同时把token放到redis中作为key,user对象作为value值,下次直接用token就能取出user对象
jQuery Ajax 前端和后端数据交互的问题 - miny_simp - 博客园 (cnblogs.com)
2.分布式session当有很多台服务器的情况下。客户发送请求给一个网址,先经过nginx负载均衡,发送给某台服务器进行处理,这台服务器就存下session。而下一次请求时,这个nginx可能把请求分配给另一台服务器处理,了另一台服务器上没有session,就需要重新登录,比较麻烦。
所以需要进行session同步。
分布式session的方案:方案一:配置tomcat进行session复制,消耗网络资源,影响tomcat性能
方案二:session存放在前端,有安全问题,session大小受cookie限制
方案三:nginx上配置粘性session,同一个ip每次访问都分配到同一个tomcat上
方案四:session共享 把session存放在一个公共的redis缓存中,这样不同的服务器都能拿到这个session。
由于把token存到redis中作为key,user对象作为对应的value值。通过token值就能拿到对应的对象。
3.cookie安全性问题 cookie安全性问题:1.cookie保存在本地,可能被脚本工具等抓取
2.cookie欺骗,cookie值被修改,然后发给服务端
3.cookie截获,拦截这个cookie,伪装为这个用户
4.flash内部有一个url函数,容易被利用,带上cookie访问外部链接
解决cookie安全性的方法:1.cookie有效期不能太长
2.设置httponly防止xss攻击
3.加密cookie
4.使用token
5.使用https
4.网络攻击: 1.XSS攻击跨站脚本攻击,把脚本注入到网站中,被浏览器当作是有效代码进行解析
2.CSRF攻击跨站请求伪造,第三方网站中诱导点击链接,发送请求给被攻击的网站,从浏览器拿到了被攻击的网站的cookie,从而伪装成用户进行操作。
如何防止CSRF攻击:1.阻止不明的外域访问 进行同源检测
2.提交时附加上本域 使用双重cookie
3.使用token ,发送请求时需要带上token,对方无法拿到token,就无法进行攻击
同源检测:1.http请求的时候有两个header,一个是original一个是referer
2.通过检查original即可
3.当既没有original又没有referer时,阻止访问或者使用token进行二次验证。
HTTPS为什么安全:0.http使用的是明文传递,不安全
1.https是由http加上ssl安全套间层组成的,ssh负责进行加密,http负责进行传输
2.https采用对称加密加上非对称加密的方式进行加密
HTTPS加密传输的过程:1.客户端发送https的请求
2.服务端进行响应,生成一对公钥以及密钥,把公钥发送给客户端
3.客户端拿到公钥,验证证书的合法性(防止中间人攻击ssl劫持)
4.客户端生成随机对称密钥,用公钥钥加密对称密钥,发送给服务端
5.服务端拿到加密后的对称密钥,使用私钥解密,拿到对称密钥
6.服务端使用对称密钥加密数据,传输给客户端
7.客户端使用对称密钥对称解密数据
最终的数据是对称加密的,加密解密的速度快,但是使用非堆成加密了对称公钥,既保证了安全性,又加快了加密解密的速度。



