文档章节

用户登陆的业务流程架构设计

saintatgod
 saintatgod
发布于 2015/12/01 15:00
字数 1531
阅读 1936
收藏 127

一、目的

对用户登陆业务流程进行一个梳理,试图从应用层角度来解决业务上曾经遇到的一些坑,提高业务的安全性,但是不可避免,流程上复杂了一些,同时业务处理时间上会有一些损耗。

二、主要流程


1、请求发送前的预处理。在对服务器发起请求之前,通过前端的处理手法,对用户名和密码进行一些处理,比如校验字符串的合理性,对密码进行hash(常用的也就是MD5,SHA这些,可以百度一下),对即将提交的数据进行hash来保证网络请求中的合法性,一定程度防止被中间人篡改数据等等。网络请求的API同时也可以采用https来进行辅助。

2、进入业务模块前的处理。我们没有办法知道发送上来的请求是否是有效的请求,可能与重复的数据发送,可能有机器人的行为,也有可能是跨过运维的撞库的行为,所以在进入业务模块前,我们要进行一些预处理,来尽量减少一些无用的数据,在一定程度上也可以减少一些数据库的压力。

当服务器接收到客户端请求之后,首先会检查来路的ip地址是否存在于黑名单列表中,如果存在的话,这个请求就会被遗弃掉。我们假定了这个黑名单,用以记录我们判定为有机器人登陆、试图猜测密码、撞库等等异常行为的ip。(事实上在有些团队中,会有负责安全模块的运维同学或者开发同学对全局的网络请求进行ip过滤,可以试图基于nginx模块或者其他其他服务器组件进行开发,力求在网络层解决掉这个问题。)

因为用户登陆的行为我们无法预知,所以我这里采用的方案是设定了两个机制:第一,在用户登录页,校验码的出现是随机的,在展示用户登陆页面的时候,向服务器发起一次请求,由服务器决定是否在客户端展示校验码;第二,设定重复登陆的两个阀值,当单位时间内尝试登陆的次数到达第一个阀值时候,我们认为这是用户正常的行为,但是需要给我们一个确认,所以我们在客户端输入数据的时候,强制要求必须有验证码,当到达第二个阀值的时候,我们才会将用户的ip或用户名放入黑名单,在黑名单中保留一段时间。(因为公网ip是可变的,如果持久放入,可能会影响到真正的用户。在安全要求比较高的场景中,到达阀值的时候,服务提供商会通过各种方式联系用户进行确认,或者短信,或者电话,各有各的招儿吧)

如果这个发起请求的ip我们判定为是有效的,接下来我们要做的就是对接收到的数据进行一系列校验以确保其合理性。例如完整性校验、字符串校验、特殊字符过滤,是否是replay等等,有必要话,我们还在对其来路域名进行校验(oauth机制和我们这个业务不太一样,所以也没有更深入的考虑),确保这个请求的合法性。

3、业务模块的处理

进行到这一步,我们可以判定这个请求是合法的,数据是可用的,接下来业务就相对比较简单了,常规就是根据提交上来的用户名和密码从存储服务器中进行检索。需要注意的是我们在服务器中存储密码的时候,对密码进行了诸如md5(salt.md5(password))的处理,salt也是可变的,salt或者根据每次登陆成功的时间进行变更,或者根据用户信息完整性做的hash,这样即使被拖库,字典造起来也是挺麻烦的一件事情,算是一种对安全上的考虑吧。

三、闲话

这个业务架构的设计其实也不算成熟,只是尽量在业务层减少一些安全问题如撞库、密码猜测、replay,在实际应用中,根据不同的场景也有不同的处理方案,如每次登陆都会短信通知或发送验证码,ActiveX插件,屏幕键盘等等。

对于replay攻击,见识有限,也不知道有什么特别好的法子,这个业务设计中采用了检查单位时间内表单数据是否提交过,如果提交过的话就不进行任何处理,处理的比较粗放。另外有一种办法就是每一次用户发起登陆请求之前,客户端会向服务器请求一个一次性的token,服务器会检查这个token的值和服务器存储的是否一致。

我见过用对称加密的方式来对数据包进行加密,但是这种加密方式的话,客户端代码一旦被反编译,一切都是亮堂堂的,这点不如非对称加密,但是非对称交密又无法保证从服务器获取的私钥一定可信,所以对数据包加密这个方案不好做评估,如果有了解的可以交流一下(saintatgod@gmail.com)。

© 著作权归作者所有

saintatgod
粉丝 20
博文 32
码字总数 10455
作品 0
东城
程序员
私信 提问
加载中

评论(9)

p2ng
p2ng
https://www.zhihu.com/question/19570377
21
saintatgod
saintatgod 博主

引用来自“pengyan5945”的评论

是“登录”还是“登陆”?看看QQ有的哪个。
你这真把我给问住了,怀疑你是文科生。。其实我也不是很明白这个区别,下次说这个的时候说登入吧,比较明白。
哈特中尉
哈特中尉
是“登录”还是“登陆”?看看QQ有的哪个。
cuihuanhuan
cuihuanhuan
挺好的,没怎么关注过这方面,多了解业务也能写代码严谨点
金贞花
金贞花

引用来自“宅男小何”的评论

请问做图用的什么软件?

viso也可以
金贞花
金贞花
一会看看
saintatgod
saintatgod 博主

引用来自“宅男小何”的评论

请问做图用的什么软件?

www.processon.com 在线工具
宅男小何
宅男小何
请问做图用的什么软件?
宅男小何
宅男小何
写的不错
Session和EL表达式实现登陆验证

现在多系统的登陆都采用单点登陆了,emmmm......后期再更单点登陆的,这次由于只是个小demo,所以我们采用Session和EL表达式实现登陆验证。 1.业务流程 用户在login登录页输入用户名密码---...

若花亦晨曦
2018/09/26
0
0
美团外卖小程序的探索和实践(演讲内容整理)丨掘金开发者大会

2017年1月9日,微信官方在2017微信公开课Pro上发布的小程序正式上线,开创了小程序开发的时代。我们的美团外卖的业务也逐步加入到小程序开发的队伍中。小程序有着无需安装、触手可及、用完即...

掘金官方
2018/09/25
0
0
【掘金开发者大会】美团外卖小程序的探索和实践

2017年1月9日,微信官方在2017微信公开课Pro上发布的小程序正式上线,开创了小程序开发的时代。我们的美团外卖的业务也逐步加入到小程序开发的队伍中。小程序有着无需安装、触手可及、用完即...

美团技术团队
2018/09/19
0
0
企业服务总线项目集成标准

1 概述   企业服务总线(Enterprise Service Bus,缩写 ESB),是SOA面向服务架构的骨干,在完成服务的接入、服务间的通信和交互基础上,提供安全性、可靠性、 高性能的服务能力保障。采用...

数通畅联
2016/11/25
105
0
BPMX流程管理平台

BPMX 简介 BPMX 是基于JEE开源、轻量级的企业流程业务开发平台,基于代码重用、组件重用、业务逻辑重用、组装重用,结合在线流程设计器 、在线业务表单设计工具及代码逻辑生成器, 将开发人员...

Activiti-保
2014/09/09
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据教程分享Scala系列之模式匹配和样例类

好程序员大数据教程分享Scala系列之模式匹配和样例类 1.样例类 在Scala中样例类是一中特殊的类,样例类是不可变的, 可以通过值进行比较,可用于模式匹配。 定义一个样例类: 构造器中每一个...

好程序员官网
24分钟前
4
0
让nginx上的静态网页在访问的时候没有html后缀

需求背景: 公司产品小姐姐觉得这个访问带html后缀不专业,要求访问不带html后缀 nginx 配置 #原配置 location / { index index.html index.htm index.php; try_files $...

Linux_Anna
24分钟前
4
0
beetl的内置函数

函数调用Beetl内置函数请参考附录,以下列出了常用的函数date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yy...

gantaos
25分钟前
4
0
spring cloud 2.x版本 Gateway自定义过滤器教程

前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 [toc] 本文基于前两篇文章eureka-server、eureka-client、eureka-ribbon、eureka-feign和spring-gataway的实现。 参考......

毛毛向前冲V5
28分钟前
4
0
VPGAME 的 Kubernetes 迁移实践

作者 | 伍冲斌 VPGAME 运维开发工程师 导读:VPGAME 是集赛事运营、媒体资讯、大数据分析、玩家社群、游戏周边等为一体的综合电竞服务平台。总部位于中国杭州,在上海和美国西雅图分别设立了...

阿里巴巴云原生
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部