程序设计安全指南暨企业内部交流规范

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 进行传输

4. 客户端

发表评论