失效认证
#
风险一:允许自动攻击,如 凭证填充(credential stuffing)、暴风算法(Brute Force)解决方法
- 限制登录失败次数、记录所有的失败登陆并通知管理员
- 实现多因素认证(multi-factor authentication)
#
风险二:允许默认、常见弱密码,如 123456、admin解决方法
不部署任何默认密码
实现常见弱密码检查,规避 前 10000 众所周知密码,如:
123456
、qwerty
实现密码规则策略(长度、复杂度、更替)NIST 800-63 B's guidelines in section 5.1.1 for Memorized Secrets
规则策略:
- 至少包含8个字符、最多包含64个字符
- 允许包含空格的所有可打印 ASCII 字符](https://www.rfc-editor.org/info/rfc0020)
- 如果允许包含 Unicode 字符,每个 Unicode 字符算一个字符(我们的实现中不允许 Unicode 字符)
- 如果密码是系统生成的(非用户输入),需至少6个字符,由确定性随机位生成器(deterministic random bit generator,DRBG生成
- 提供密码强度提示 Meters,有助于用户选择强度高的密码
- 提供可显示密码内容的选项,而不是都以 * 呈现
- 密码的存储形式加盐
#
风险三:允许不完备的密码恢复流程,如 根据回答常识问题来找回密码解决方法
实现忘记密码流程尚未有工业标准,这里提供通用模型:
- 第一步:搜集用户识别身份数据,如 让用户填写手机号、邮箱地址;为了防止恶意尝试,需要有图形验证码
- 第二步:校验安全问题(可选)
- 第三步:发送令牌(手机的话就是短信验证码)到第三方渠道(手机、或邮箱),令牌必须设置有效期限,如10分钟
- 第四步:修改密码(Token + 新密码)
- 第五步:记录日志
#
风险四:允许非加密平文本传输解决方法
- LTS 加密
#
风险五:Has missing or ineffective multi-factor authentication解决方法
#
风险六:允许 URL 中暴露 Session ID( URL Rewriting)解决方法
#
风险七:登录成功后未更新 Session IDs解决方法
#
风险八:登出或者一定时期非活跃状态时用户 Session 或授权 Token没有被正确的无效化解决方法