Web系统是当今IT系统中最常见的,用户登录鉴权基本也是必备的,因此用户登录阶段的安全性非常重要
如果给安全性分个类,我想可以分为:
- 明文传输(极不安全)
- 对密码加密后传输(稍微安全,但是基本上也是形同虚设)
- 每次传输均随机加密(安全性较高)
这里我们不讨论HTTPS的情况,HTTPS是基于客户端和服务器端证书的,连Url中的参数都会加密
下面分别讲一下每个方式的实现和安全漏洞
- 明文传输(极不安全)
这种是最不安全的方式,大概实现是通过传输username和password原始值来实现的。这样其实涉及到拦截问题,如果有人能够攻破局域网内的路由器,其实所有经过该路由器的请求都可以被检测到,密码当然也会被拦截,所以除非是毕业设计或者原型演示项目图方便,极不推荐这样实现
- 对密码加密后传输(稍微安全,但是基本上也是形同虚设)
这种方式是对明文的一个改进,一般对密码进行Md5加密,然后数据库内部也存储Md5加密后的密码,这种方式依然避免不了别人恶意拦截请求,获取到MD5加密后的密码,基本上拿到这个相当于拿到密码了,每次可以用这个加密后的值请求登录接口来实现登录,这种方式也不推荐
- 每次传输均随机加密(安全性较高)
这种方式是每次请求均附加一个随机数(一般取时间戳),然后把用户输入的密码进行md5加密,加密后的值与随机数拼接,再取md5值,具体算法如下:Key = Md5(Md5(password)+ts);然后登录接口接收三个参数:用户名,随机值(时间戳),加密后的Key,登录逻辑按照加密方式进行判断,服务端也可以根据时间戳来防止暴力登录
当然最安全的是HTTPS实现登录,如果没有HTTPS条件的话,推荐使用第三种方式,你说呢?