如何安全传输存储用户密码
我们开发网站或者APP的时候,首先要解决的问题,就是**「如何安全传输和存储用户的密码」**。一些大公司的用户数据库泄露事件也时有发生,带来非常大的负面影响。如何安全传输存储用户密码,是每位程序员必备的基础。本文将跟大家一起学习,如何安全传输存储用户的密码。
一般使用https协议+非对称加密算法来传输用户密码,为了更加安全,可以在前端构造一下随机因子哦。使用BCrypt+盐存储用户密码。在感知到暴力破解危害的时候,**「开启短信验证、形验证码、账号暂时锁定」**等防御机制来抵御暴力破解。
如何安全传输
要拒绝用户密码在网络上裸奔,我们很容易就想到使用https协议,那先来回顾下https相关知识吧~
https协议
http的三大风险
为什么要使用https协议呢?**「http它不香」**吗?因为http是明文信息传输的。如果在茫茫的网络海洋,使用http协议,有以下三大风险:
窃听/嗅探风险:第三方可以截获通信数据。数据篡改风险:第三方获取到通信数据后,会进行恶意修改。身份伪造风险:第三方可以冒充他人身份参与通信。
如果传输不重要的信息还好,但是传输用户密码这些敏感信息,那可不得了。所以一般都要使用**「https协议」**传输用户密码信息。
https原理
https原理是什么呢?为什么它能解决http的三大风险呢?
https=http+SSL/TLS,SSL/TLS是传输层加密协议,它提供内容加密、身份认证、数据完整性校验,以解决数据传输的安全性问题。
为了加深https原理的理解,我们一起复习一下**「一次完整https的请求流程」**吧~
客户端发起https请求服务器必须要有一套数字证书,可以自己制作,也可以向权威机构申请。这套证书其实就是一对公私钥。服务器将自己的数字证书发送给客户端。客户端收到服务器端的数字证书之后,会对其进行验证,主要验证公钥是否有效,比如颁发机构,过期时间等等。如果不通过,则弹出警告框。如果证书没问题,则生成一个密钥,并且用证书的公钥对这个随机值加密。客户端会发起https中的第二个请求,将**加密之后的客户端密钥(随机值)**发送给服务器。服务器接收到客户端发来的密钥之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。服务器将加密后的密文返回给客户端。客户端收到服务器发返回的密文,用自己的密钥对其进行对称解密,得到服务器返回的数据。
https一定安全吗?
https的数据传输过程,数据都是密文的,使用了https协议传输密码信息,一定是安全的吗?其实**「不然」**~
比如,https完全就是建立在证书可信的基础上的呢。但是如果遇到中间人伪造证书,一旦客户端通过验证,安全性顿时就没了哦!平时各种钓鱼不可描述的网站,很可能就是黑客在诱导用户安装它们的伪造证书!通过伪造证书,https也是可能被抓包的哦。
对称加密算法
既然使用了https协议传输用户密码,还是**「不一定安全」,我们就给用户密码「加密再传输」**呗~
加密算法有**「对称加密」和「非对称加密」两大类。用哪种类型的加密算法「靠谱」**呢?
对称加密:加密和解密使用**「相同密钥」**的加密算法。
常用的对称加密算法主要有以下几种哈:
如果使用对称加密算法,需要考虑**「密钥如何给到对方」**,如果密钥还是网络传输给对方,传输过程,被中间人拿到的话,也是有风险的哦。
非对称加密算法
再考虑一下非对称加密算法呢?
❝**「非对称加密:」**非对称加密算法需要两个密钥。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。❞
常用的非对称加密算法主要有以下几种哈:
❝如果使用非对称加密算法,也需要考虑**「密钥公钥如何给到对方」,如果公钥还是网络传输给对方,传输过程,被中间人拿到的话,会有什么问题呢?「他们是不是可以伪造公钥,把伪造的公钥给客户端,然后,用自己的私钥等公钥加密的数据过来?」**大家可以思考下这个问题哈~❞
如何安全地存储
用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式:
直接明文保存
文章为作者独立观点,不代表股票交易接口观点