口令安全的笔记

187 views

口令复杂度

要求

区分业务场景,设定规则的强度。
口令的规则中,需要包含如下要素:

  • 口令的长度
  • 口令中字符的组成
  • 口令与用户名的关系
  • 当前口令与历史口令的相关性

举例

比如对管理系统中管理员的口令,可以做如下要求

  • 口令要求由8~32个字符组成,包括8和32。
  • 口令中的字符由英文字母(包括大写/小写)、数字、特殊符合组成,并且口令中包含至少一个大写字母、一个小写字母、一个数字、一个特殊字符。特殊字符如~!@#$%^&*()-_
  • 口令中不允许出现用户名,无论大、小写形式。
  • 曾经使用过的口令在36个月内不得使用。

口令的呈现

要求

  • 口令校验失败时,不得直接提示口令错误。
  • 用户在界面上输入口令时,口令输入框中不允许呈现明文,同时输入框不支持复制。
  • 用户在命令行终端输入口令时,不允许回显口令。
  • 禁止在shell命令中使用口令,包括明文和密文。

防暴力破解

要求

需要考虑如下要素:

  • 一段时间内,重试次数的上限。
  • 两次重试之间的时间间隔。
  • 重试2次后,要求用户输入验证码。
  • 重试次数达到上限后,在一定时间内,禁止账号登录或者禁止来自某IP的登录请求。防止慢重试和DoS攻击。

对验证码的要求

  • 验证码需在服务端生成。
  • 验证码需要包含英文字母(包括大写字母、小写字母)、数字。
  • 验证码中字符的位置、相互之间的距离,随机生成。
  • 验证码中需包含一定的干扰线条。
  • 验证码的背景、字符、线条,需使用不同的色彩。
  • 验证码的生成器中,需使用安全随机数生成器。

修改策略

要求

需要考虑如下要素:

  • 用户的初始口令由系统生成,并且使用恰当的方式通知用户。
  • 用户使用初始口令登录系统时,系统强制用户修改口令。
  • 系统允许用户修改登录口令。
  • 修改口令时,系统要求验证用户的当前口令。
  • 口令具有有效期,有效期时长由系统定义。
  • 在口令超期后,系统强制用户修改口令。
  • 用户修改口令成功后,跳转至登录界面,用户输入新口令并校验成功,则允许登录。
  • 系统管理员可以强制初始化用户的口令为初始口令。

存储策略

要求

  • 如无必要,禁止保存口令。
  • 禁止明文保存口令。

规范

  • 在对口令在处理前,需要将用户名和口令拼接在一起,然后再进入加密处理。
    说明:假设小明、小强二人使用相同的口令登录网站系统,假如网站系统在保存口令时未按上述规范实现,则当攻击人员获知小明的口令,并且攻击人员知道小明和小强使用相同的口令,则导致小强的账号被间接攻破。
  • 如无必要,则优先使用单向加密算法对口令进行处理,后续使用时以密文形式进行一致性判断。
  • 使用存储密钥对口令进行处理。
  • 存储密钥不允许和其它用途的密钥混用。
  • 存储密钥不允许在代码中写死,必须支持更换。

举例

  • 对于配置文件、shell脚本、应用的日志(包括自研软件和外部软件等记录的日志)、数据库存储、应用使用的缓存、浏览器的存储(包括Cookie、LocalStorage、SessionStorage等)等,禁止出现明文口令。
  • 对于shell脚本、应用的日志(包括自研软件和外部软件等记录的日志)、浏览器的存储(包括Cookie、LocalStorage、SessionStorage等)等,禁止出现密文口令。

传输策略

要求

  • 禁止明文传输口令。

规范

  • 使用安全的传输通道传输口令。
  • 传输前使用传输密钥对口令进行处理。
  • 传输密钥不允许和其它用途的密钥混用。
  • 传输密钥不允许在代码中写死,必须支持更换。

例外

外部软件的API,如数据库驱动等需要明文传入口令。



若非注明,均为原创,欢迎转载,转载请注明来源:口令安全的笔记

关于 JackieAtHome

基层程序员,八年之后重新启航

此条目发表在 笔记 分类目录。将固定链接加入收藏夹。