29-用户安全架构设计五(用户注册)
xiangliheart
xiangliheart
发布于 2022-05-25 / 15 阅读 / 0 评论 / 0 点赞

29-用户安全架构设计五(用户注册)

5种用户注册设计

注册是每个封闭式系统都需要的功能,属于一种数据采集手段,采集的数据作为用户登录及数据关联的基础。为了保证注册的真实性,往往需要用户身份的验证和账户的激活流程。在这些注册流程中,最重要的就是保证用户信息的安全和激活验证码的安全。

注册可以分为开放式注册、封闭式注册、半封闭式注册、手机验证码注册和邮箱激活注册,每一种注册方式均有不同的设计方法。

5.6.1 开放式注册封闭式注册和半封闭式注册

1.开放式注册和封闭式注册

开放式注册是将注册功能暴露给用户,用户可以自己填写必要信息,完成注册、激活、登录。而封闭式注册则没有用户注册页面,只能由管理员在后台添加。

对于2B、2C的互联网产品,绝大多数都采用开放式注册或第三方登录注册的方式。对于企业内部系统,绝大多数都采取封闭式注册的方式。

2.半封闭式注册

现状:有些企业员工申请系统账号是这样操作的,员工填写Excel 申请表,然后用邮件发送给管理员,管理员收到申请后核实信息,核对无误后再一个个录入系统,或者导入系统,最终把生成的账号和密码再用邮件发送给员工。

问题:流程烦琐,如果用户信息填写不正确,就要反复沟通调整;管理员不断地进行重复劳动;密码不是员工自己设置的,管理员完全掌握,以邮件或其他方式传递密码都十分不安全。

方案:将封闭式注册加上互联网思维,变为半自助化的用户注册功能。

半封闭式注册流程如图5-17所示,包含以下5个步骤。

(1)     员工线上填写注册申请信息,如姓名、证件号、员工号、所在部门、职位、邮箱、手机号、密码等企业要求的信息,然后提交申请。

(2)     服务端接收到申请后,存储注册信息,并将用户状态标记为未激活,等待管理员审核。

(3)     向客户端返回申请成功,请等待审核的应答消息。

(4)     管理员核对员工信息,如果信息无误,则审核通过,并将用户状态修改为已激活。

(5)     向用户发送通知短信或邮件,告知用户已开通。

图5-17 半封闭式注册流程

通过这种半封闭式注册的方式申请系统账号,大大提高了账户开通的效率和安全性,没有用户密码泄露的风险,同时满足了企业的管理要求。传统软件普遍缺乏互联网化的思考,将线下操作和线上流程做有机的整合,一些简单的思维变通就是创新,就能够提高生产率。

思考1:如果管理员审核不通过,则可以作废原有注册信息,然后通知用户重新填写注册信息,再次申请注册。这种设计只适用于用户需要填写的信息较少的情况。如果用户需要填写的信息较多,则让用户全部重新录入一遍,显然是不合理的。可以在提醒短信或邮件中,将信息修改URL发送给用户。例如,http://xxx:xx/applyReg?

id=1q4s7d9v在URL中携带id参数,为本次申请的唯一ID。

这样,在用户打开链接后,就可以根据申请ID,从服务端获得当时填写的信息,并在此基础之上进行修改,节省了用户的录入成本,如图5-18所示。在这个设计中,有以下3个数据安全问题很容易被忽略。

(1)     对于申请ID的设计不可以是1、2、3这种自增主键,或者是纯数字主键,一旦用户获取此链接,随意修改一下ID的数值就可能查询到其他人的申请记录,造成数据泄露。

例如,原链接http://xxx:xx/applyReg?id=1修改为

http://xxx:xx/applyReg?id=2,就可以获取申请ID为2的全部数据。

因此,URL上携带的申请ID必须为MD5、SHA加工过的字符串,或者是UUID字符串,保证唯一性,又保证了防篡改性。

(2)     第6步服务端使用申请ID去查询原申请信息时,一定要加上状态控制,只允许查询审核不通过状态的数据,否则用户可以反复利用此链接修改用户数据。

(3)     第8步用户再次提交申请,服务端也要增加状态判断,只有当前状态为审核未通过状态的数据才允许再次申请,并且将状态再次修改为待审核状态。

图5-18 半封闭式注册的安全问题

思考2:半封闭式注册设计一般只适合内部管理系统,而不适合互联网产品,否则很容易被攻击,造成大量的垃圾注册信息。如果需要将此流程开放到互联网上,则必须在员工提交信息之前增加手机验证码、邮箱验证、图片验证码等手段进行人机识别,从而防止恶意攻击。

5.6.2 手机验证码注册

国外大多数的应用都是采用邮箱注册的,而中国大多数的应用都是采用手机号注册的,所以如果开发的系统涉及国际化推广,则一定不要忽略这个细节。国外互联网发展得较早,那时手机还不是那么方便,并且短信发送的成本很高。所以,国外系统从一开始就使用邮箱与用户建立连接,从而沿用了这种使用习惯。

而国内互联网起步较晚,大多数人都没有邮箱,所以早期国内采用账号加密码注册的方式最多。随着手机的普及,现在国内几乎每个人都有一个手机号,而邮箱的使用率却非常低,这也是为什么从邮箱注册跨越到了手机注册的原因。

使用手机验证码注册有哪些优势?

手机号与人存在真实的绑定关系,由于手机号在国内采用实名制,因此信息造假的可能性极低,对于用户的后期营销和活动推广会十分有利。但是,也因为这个原因,有些用户害怕泄露自己的隐私,抵触使用手机号注册。

相比邮箱而言,手机短信能够更加快速地触达用户,而邮箱必须使用指定软件,然后登录查看。手机验证码机制能够保证注册人就是手机号持有者,更好地防止了恶意注册。

手机验证码注册设计这里不再赘述,详情可参见4.3.1小节。

5.6.3 邮箱激活注册

邮箱激活注册是PC端系统经常使用的方式,流程如图5-19所示。

(1) 客户端填写注册邮箱、账户密码等信息。

(2) 提交已经填写的信息给服务端。

(3) 服务端校验邮箱是否已经注册,如果没有注册,则生成账户信息,状态设置为待激活。同时,发送激活邮件到用户的注册邮箱,邮箱的内容最主要的就是激活链接,如http://xxxx.xx/active?

token=1ajduw82je&email=ikvcjdiwjk839xdi1。激活链接中包含本次激活的Token加密串和要激活的邮箱加密串,Token的使用原理可参见5.4 节。

(4) 用户登录邮箱,打开激活链接,将Token、邮箱发送至服务端,发起激活操作。

(5) 服务端验证Token与邮箱是否匹配,以及Token是否有效,然后激活用户。

(6) 服务端返回账号激活成功消息。

图5-19 邮箱激活注册流程

思考:手机验证码注册与邮箱激活注册的主要区别是什么?

手机验证码注册是先验证,再将账户数据落地,相当于是一次性申请和开通。而邮箱激活注册是先留存用户数据,再修改用户的状态。因此,邮箱激活注册更容易造成垃圾注册数据。


评论