关于登录或授权页面的错误提示

写这篇文章是由于最近在产品登录授权页面上,到底如何返回错误提示引发的一些思考,调研后做下总结。

登录和授权在现在的互联网产品中属于最常用必备的模块,在互联网安全形势严峻的今天,其重要性更是不言而喻。如何处理好这个部分,关系到产品在用户心里的信誉。关于登录授权的安全性涉及方方面面,本文重点讨论的场景是:当登录或授权失败时,应该如何返回给用户错误提示。

 

场景及问题

场景具体描述为:

用户进入登录页面,输入手机号,点击发送短信验证码;用户收到短信验证码后,输入验证码,点击登录;校验信息成功,给予用户授权,失败则给予错误提示。

问题1:

当用户输入手机号后,点击发送验证码时,如果用户不存在或者不应被授权时,是否应该直接提示错误信息,如:用户不存在,未注册,手机号已被占用,已绑定等。

问题2:

当用户收到短信验证码已经超时,输入过期验证码或者没有点击发送验证码,直接输入错误验证码时,是否应该提示:验证码无效,验证码未发送等。

综合的讲,就是是否应当在登录或授权页面给予用户详细的错误提示。

 

调研

首先我去看下主流App是如何做的,调研的有:支付宝,京东,微博,中国移动,摩拜,ofo,首先在手机上退出登录,然后使用短信验证码进行登录,没有短信登录的,使用短信找回密码功能测试。结果是

问题1:

支付宝,京东,微博将手机号输入页面和短信验证码页面分离,并且校验了用户手机号是否存在,不存在给予提示。而中国移动,摩拜,ofo,手机号输入和短信验证码在同一页面,没有校验用户手机号是否存在,而是直接提示短信发送成功。

问题2:

支付宝,京东,微博,中国移动,摩拜,ofo,所有App在短信验证码超时或未发送验证码时,提示信息不包含验证码无效,验证码未发送等信息,而只是提示:验证码错误。错误提示与正常情况下已发送验证码且验证码在有效期时,用户输入错误验证码的提示相同。

 

解惑与总结

原因是什么呢?这么做的目的是为什么呢?我到OWASP找到了答案。其中两段描述:

An application should respond with a generic error message regardless of whether the user ID or password was incorrect. It should also give no indication to the status of an existing account.

The correct response does not indicate if the user ID or password is the incorrect parameter and hence inferring a valid user ID.

也就是说登录授权操作的结果,不应该包含或者隐含账户的状态或者处理逻辑的状态这些信息,而是应该返回一个统一的错误提示,这样做的目的是为了尽量避免受到破解攻击,攻击者可以利用上你返回的任何附加信息,对账户进行破解。通过用户手机号验证用户是否存在,会存在泄露用户隐私及系统账户信息的风险,比如攻击者可以通过枚举,查出系统内全部注册手机号。以上实例是从短信验证码角度考虑的,由于短信验证码存在有效期,其实本身安全性还是较高,当系统使用用户密码时,采取的策略就必须更加严谨。

 

posted on 2017-03-25 15:51  eshizhan  阅读(2949)  评论(0编辑  收藏  举报