如果文章对您有帮助,是我前进最大的动力!您当前位置:首页 > 技术心得 > java开发

登录功能安全性设计,看看你做的登录安全吗?

发布时间:2017-10-31 22:03:46编辑:刘强 阅读(

“登录”功能是我们再熟悉不过的了,在我们刚刚接触编程的时候,也许经常会拿登录功能来举例学习web开发,当时认为登录不就是拿用户输入的用户名和密码去数据库校验一下吗?道里虽是如此,但一个完善的登录模块要考虑的相关问题可不少。

登录功能是一个系统的门户,是一个系统最重要的功能模块之一。登录模块如果存在漏洞,相当于系统的大门向黑客完全敞开,如果没有一个安全可靠的登录模块,那么这个系统是无法生存的。那么,如何制作性能高、安全性强的登录模块呢?

登录模块安全性.jpg

代码安全性

网络传输加密:用户在前台输入用户名和密码提交表单后,要将用户信息进行加密后,再进行网络传输给后台。注意:前台的加密方式和数据库保存密码的加密方式要不一样,绝对不能直接将密码在前台加密完成后,直接和数据库进行比对,如果被劫持后加密形同虚设。正确的做法是每次请求前台先获得一个后台传递来的秘钥,使用秘钥将用户信息加密传输给后台,后台再使用秘钥进行解密,最后再进行一次不可逆加密后和数据库进行比对。

登录过滤器:一个必须有的模块,用于验证登录信息,防止用户未登录却访问登录后的界面。

防止SQL注入:前后台过滤用户提交的敏感字符,如or、and、逗号、分号等;使用参数化的SQL或者直接使用存储过程进行数据查询存取,彻底防止SQL注入攻击。

密码加salt:不要直接使用MD5等方式对密码进行加密存储,密码加盐加密的方式可以大大提高密码破解的难度,有效提高安全性。MD5+salt的方式是最为简单而实用的。

安全性功能

首次登录修改密码:如果账号密码是由管理员初始化得来的,用户首次登录后应当强制修改初始密码,并重新登录。

验证码:登录界面加入验证码能够有效防止密码被暴力破解,提升登录安全性。有条件的系统还可以使用“短信验证码”、“邮件验证码”等。

错误密码次数限制:比如用户连续5次输入错误密码,则将账户冻结,1天后解锁或管理员解锁。

用户名、密码复杂度要求:用户账户在注册时应该限制过于简单的用户名和密码,最好都要求6位以上的数字加字母组合。

异常登录提醒:用户在异地登录系统,要通过邮件、短信方式提醒用户,防止账户非本人操作或被盗取的风险。

登录审计日志:记录用户登录成功、登录失败、退出等操作的日志记录,并做好归档。

性能优化

用户名和密码最好使用ajax异步提交进行校验,减少用户刷新界面产生的请求数量,提高用户体验和性能。

用户名和密码在数据库中要建好索引,对于用户登录请求密集的系统,可以直接将用户信息保存在java容器中,或使用数据库内存表,提升校验效率。

后台登录逻辑判断代码中,尽可能将判断数据库中用户信息放在最后,比如可以先判断验证码、用户名的长度和规则等,过滤一部分明显不正确的登录请求。

不要相信前台JS的校验,前台JS的校验只是为了提升用户体验,如果用户信息中某些字段格式有特殊要求的,后台再次校验是必不可少的。

 

PS:以上是我总结的关于登录模块安全性和性能先关的一些内容,欢迎大家补充和指导。登录认证功能制作完成后,还应当使用appscan等漏洞扫描工具对系统进行扫描。对于公司来说,制作一个完善的登录模块是很有必要的,毕竟复用性很强,基本可以一劳永逸。

关键字词:登录安全,网络安全,系统安全,网站优化