打造一个安全的用户名密码登陆系统 - 网络安全频道it165.net -- 国内领先安全技术频道 - 最新IT资讯_电脑知识大全_网络安全教程 -.docx
《打造一个安全的用户名密码登陆系统 - 网络安全频道it165.net -- 国内领先安全技术频道 - 最新IT资讯_电脑知识大全_网络安全教程 -.docx》由会员分享,可在线阅读,更多相关《打造一个安全的用户名密码登陆系统 - 网络安全频道it165.net -- 国内领先安全技术频道 - 最新IT资讯_电脑知识大全_网络安全教程 -.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、打造一个安全的用户名密码登陆系统-网络安全频道次元立方网-国内领先安全技术频道-最新IT资讯_电脑知识大全_网络安全教程-次元立方网撰写于2016年8月1日修改于2016年8月2日分类编程杂记标签AngularJS/Express/Node.js/Waterline/安全很多的网络应用都有基于用户名密码的登陆功能,而绝大多数的登陆都毫无安全性可言,不夸大的讲,大多数的程序员根本不知道如何去保证用户名和密码的安全。安全的标准要想一个登陆系统安全,至少要保证下面几个方面。原始密码的安全很多人对于用户的原始密码安全,还停留在不被非法第三方获取的层面上,但实际上,原始密码的最大威胁,往往来自于系统的开
2、发人员和服务器的管理人员。这些人可能是有意采集,可以能是无意泄露,往往是用户原始密码的泄露的罪魁祸首。在构建登陆系统的时候,应该从根本上避免,做到只要用户本人和键盘记录器才知道原始密码。那怎样做到这一点呢?首先一点就是一定要在客户端进行密码加密,这能够使得后端拿到的密码已经是加过密的,一来服务器接触不到原始密码,二来就算通信被监听,第三方就算拿到了能够用来登陆的客户端加密密文,也无法获知用户的原始密码。哈希:不可逆加密密码加密不同于普通的加密,一是内容重要,二是密码的验证根本不需要原文,要检查一个密码能否正确,只需要看它加密的结果与正确的密码加密的结果能否一致即可。确定了这两点,对于加密的方法
3、,就只要求同一个字符串加密后会得到同样的密文。哈希完全知足了这一要求。在哈希算法中,首选是SHA2系列,固然安全由于SHA1的原因此被质疑,但至少目前还没有证实有什么纰漏。MD5由于用得过多,而且彩虹表实在过于泛滥,并不推荐使用。另外一个问题,哈希一遍是不是就够了呢?当然不,不仅要屡次哈希,而且还要与用户名一类的数据混加,比方,能够使用下面的方式来在客户端加密原始密码:sha256(sha265(sha265(password)+sha265(username)这样,不仅能够增加密文反推原文的难度,还参加用户名,使得就算密码一样,不同用户的密文也完全不一样。在客户端的加密,基本上也就只能到这一
4、步了,由于一个最主要的问题是,客户端的加密算法是公开的。盐:混入随机数据固然在客户端对密码进行了加密,但无论是算法,还是混入的用户名,都是公开了的。剩下的加密,就需要留给后端了。由于对同一字符串进行哈希的结果是恒定的,所以知道了算法和密文,理论上是能够反推出密码的,反推的难度取决于用户原始密码的复杂度。那怎样才能够让反推的难度指数级增大呢?答案是在原始密码密文的基础之上,再参加一个随机字符串,进而到达让用户的密码更复杂的效果。这个随机字符串,便是盐。后端获取到客户端传来的密码之后,再通过加盐哈希进行再加密。比方像下面这样:sha256(sha256(username+sha256(passwo
5、rd+salt)+salt+sha256(username+salt)注意,盐的保存非常关键,务必将它与用户信息分开存放。密文和盐的更新与不可追溯如今密码已经分别在客户端和后端屡次哈希,还加了盐,好似已经很安全了。但其实,我们还能够更安全。那就是经常变更盐,让用户信息表中的密文字段值也经常变化。这样,除非同时拿到用户信息和盐,否则仍然无效。那什么时候变更盐和密文呢?由于后端是不存储客户端哈希的密文的,所以只要在登陆的时候,才能够进行盐和密文的修改。用户名本身能够加密吗?这个想法好似有点不靠谱,但实际上,用户名假如只是作为单纯的登陆凭证,其实是能够像密码一样加密的。由于无论是注册、登陆还是找回密
6、码,都不需要用户名的原文。但注意,用户名只能哈希,不能加盐,否则就没什么根据去找盐了。用户名的哈希能够分两部分,一是客户端哈希,到了服务器端,能够进行再次哈希。在本文的Demo中,将不对用户名哈希。通信的安全在应用层面基本上已经很安全了。接下来就是客户端和通信的安全。客户端的环境基本不可控,所以只能在通信的安全上想办法了。不过其实也不用想什么多的办法,直接使用HTTPS就行了。上面总结了如何保证一个用户名密码登陆系统的安全,这里再来看看一个知足上述要求的登陆系统的登陆流程。注册流程相对来讲简单一些,所以就不再具体介绍。Demo是一个简单的Web用户名密码登陆系统,代码示例也取自于它。阅读器登陆
7、阅读器主要完成下面工作:获取用户输入的用户名及密码通过输入的用户名和密码,进行哈希,得到阅读器端密文将用户名和密文提交给后端主要代码如下,取自client/app.js:/密码与用户名的哈希functionencryptPwd(username,password)username=username.toLowerCase();returnsha256(username+sha256(sha256(sha256(sha256(password)+sha256(username)$scope.login=function()/检查用户名和密码的合法性,比方能否输入,长度能否足够等if($scope
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打造一个安全的用户名密码登陆系统 网络安全频道 it165.net - 国内领先安全技术频道 最新IT资讯_电脑知识
链接地址:https://www.taowenge.com/p-19267976.html
限制150内