HTTP
无需加密理由:在 HTTP 协议下,数据是明文传输,传输过程中网络嗅探可直接获取其中的数据。无论是否加密,都可以登录成功(以登陆为例)。前端代码透明,加密算法是已知的。
需要加密理由:防止社会学攻击(用户习惯于在多个网站使用相同密码,如果明文传输密码会造成其他站点密码泄露)
HTTPS
- 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。
在HTTPS的情况下是否还需要加密?
无需加密理由:HTTPS 的诞生就是为了解决中间人攻击的问题。传输过程中无法获取数据。
需要加密理由:HTTPS 证书失效过期泄露 或者 有浏览器不兼容情况。
在启用 HTTPS、前端没有加密的情况下,用户明文提交密码后,平台开发人员可以通过日志、修改线上代码等方式获取用户的密码,从而产生隐患。
理想情况,传输过程,数据库中都不应存在明文隐私信息。
实际情况,不能依赖于前端加密,安全处理应该以平台为主。但是前端加密,可以增加攻击成本,尽可能降低攻击带来的损失。
非对称加密,结合平台加salt,图形验证码有效期。