[原创] WEB登陆密码安全机制 请大家评估
客户端JS代码实现的是 服务器实现的是
1.向系统请求一个随机数 x (可用AJAX) 1.产生一个随机数 x,放入session
2.产生一个随机密码 enPwd1 = MD5(pwd+ x)
3.登陆请求 2.取DB中密码 dbPwd(和JS中的pwd相同) 和session中的x 并计算:enPwd2 = MD5(dbPwd + x)
3.比较 enPwd1 和 enPwd2 是否相同
注: 1.加密过程采用不可逆算法.
2. pwd和dbPwd 可能已经是密文,只要求相同.
3. 随机数x的复杂程度和密码安全有关,同时对尝试登陆次数进行限制.
感觉采用这种机制,在网络传输中应该相当的安全了吧. 并且成本很低..话说回来,密码安全问题主要出现在哪个步骤? 应该是输入的时候吧! 键盘监听.
------解决方案--------------------还有这些
1 传输过程,可以用https加密,保证传输过程的安全性
2 服务端:模拟浏览器发送请求,绕过前台js校验,这个可能需要在服务端手工进行验证
3 sql注入,可以用preparestatement之类
------解决方案--------------------
1.md5已经不够安全,用sha-1好些吧。
2.你用的随机数达不到预期的效果,随机数从服务端获取的,可以被拦截。
然后拦截混合加密后的密码,仍然可以进行穷举。
------解决方案--------------------我通常都是js两次md5传送到服务器端。
除非用钩子记录键盘行为,要不然,穷举两次md5也够他喝一壶的了
再结合服务器端的公匙私匙,将近无敌了
------解决方案--------------------后台传输数,产生随即数,不安全
------解决方案--------------------注重实效性,即使有穷举的机会,也要让他在穷举成功之前就超时。
------解决方案--------------------密码安全不能只考虑算法和算法的实现过程,其它环节也有可能存在安全漏洞。
------解决方案--------------------采用MD5等摘要算法(key透明/可获取的情况下),理论上说可以解决传输中的安全问题,但不能解决密码的破解问题
单纯传送的问题,更有效的还是采用HTTPS
单纯破解的问题,更有效的办法是强制用户使用复杂的密码和登入失败次数的控制
------解决方案--------------------
如果要做安全的网络登录,必须用SSL,这样能防止数据在传输中被截获,要防止键盘记录木马的话,一般密码输入使用activex控件(招商银行,支付宝的做法)
附带2个在线破解MD5的网站,看看你的MD5能不能被破解:
http://www.cmd5.com/
http://www.md5.org.cn/