Beta 0.0.1 版
更新日期: 2021 年 4 月 27 日
1. 目录
2. 员工端
2.1 安全
2.1.1 网站系统登录安全
员工端登录需采用基于 WebAuthn 协议的免密接口,或使用密码 + OTP(一次性密码)的 2FA(两因素验证)方式进行登录,应当配置相应的验证码,并设置 cookie 的清除条件。
2.1.1.1 WebAuthn
WebAuthn 需使用硬件的方式进行验证,应支持安全密钥、Face ID 或 Touch ID 等硬件。
2.1.1.2 密码
登录密码应当满足以下条件:
- 密码中应当排除用户名称、ID、公司名称、员工姓名
- 密码中应排除与常用密码库中一致的密码
- 密码中应排除连续三个相同的字符
- 密码中应排除连续超过四位的数字
- 密码中需包含大小写字符
- 密码中需包含半角特殊符号
- 密码中需包含数字
- 密码需不少于 18 位,不多于 63 位
- 密码建议遵循随机生成的方法获取
2.1.1.3 OTP(一次性密码)
OTP 建议使用符合 Google Authenticator 标准的基于时间的一次性密码,也可备选手机验证码或 Challenge Response(挑战回应认证)。
2.1.1.4 验证码
非内部网络地址访问登录界面时,在验证 WebAuthn 或密码前,应当通过 reCaptcha v3 的认证(安全性大于 0.8),如未通过,则需完成 reCaptcha v2 验证。
2.1.1.5 cookie
满足以下任一条件则应当清除 cookie :
- 非内部网络,连续 10 分钟无任何操作时
- 非内部网络,ip 出现变动时
- 关闭浏览器时
- 每次登录超过 2 小时
3. 服务器端
3.1 安全
3.1.1 用户/员工的密码储存
密码储存应该满足以下要求:
- 严禁明文储存
- 加密的密文应使用非对称算法(例如SHA512),即无法通过密文反推密码
- 使用非对称算法时,每个用户应具有唯一的盐值
- 用户达到一定数量后,计算后所得的 hash 值应当通过硬件加密设备加密后储存在服务器上
- 非对称算法应当使用先进的,而非过时的
- 盐值不得少于32位
3.1.2 用户/员工的密码传输
密码传输应该满足以下要求:
- 严禁将盐值传输给用户端
- 服务器在用户访问登录页面时,向其发送一组公钥
- 服务器收到用户经过公钥对称加密的密文后对其解密
- 服务器对密码进行加盐,hash 计算,再与服务器中的数据进行比对
- 传输过程中应当全程使用 HTTPS,可使用 HSTS 满足上述要求
- 使用不低于 TLS v1.1 的版本进行传输
- 优先使用 HTTP/3 或 HTTP/2 进行传输