定义密码策略

定义密码策略。

本文档介绍如何创建自定义密码策略验证器。更多详细内容请参考 iTop 官方文档

概述

iTop 不内置复杂的密码策略,但可以通过扩展实现自定义验证器。

可能的策略

黑名单策略

检查用户密码是否不在弱密码列表中。实现简单,本教程以此为例。

密码不能与前密码相同

更复杂,因为:

  • iTop 只存储密码哈希
  • 盐值是随机的且难以提取

实现概要:

  • 验证器需实现 iApplicationObjectExtension::OnDBUpdate()UserLocalPasswordValidator 接口
  • 将之前的密码哈希存储到专用类中
  • 使用明文密码与哈希列表对比(不能比较两个哈希)
  • 建议限制存储的哈希数量

实现验证器

创建实现 UserLocalPasswordValidator 接口的类:

class MyCustomPasswordValidator implements UserLocalPasswordValidator
{
   // 您的代码...
}

验证时返回 ValidatePassword 实例:

  • 密码有效:new UserLocalPasswordValidity(true)
  • 密码无效:new UserLocalPasswordValidity(false, $sMessage)

$sMessage 必须是已翻译的消息,按约定使用格式: 'Error:UserLocalPasswordValidator:<YourClassName>/ValidationFailed'

示例:黑名单验证器

class UserPasswordPolicyBlacklist implements UserLocalPasswordValidator
{
   public function __construct()
   {
   }

   public function ValidatePassword($proposedValue, UserLocal $oUserLocal, $config)
   {
      $sBlacklistFile = APPROOT.'data/passwordBlacklist.txt';

      $handle = @fopen($sBlacklistFile, "r");
      if (! $handle) {
         return new UserLocalPasswordValidity(
                false,
                'Unknown error : Failed to read the password blacklist.'
         );
      }
      try {
         while (($sBlackListPwd = fgets($handle, 4096)) !== false) {
            if (trim($sBlackListPwd) == trim($proposedValue))
            {
                $sMessage = Dict::S(
                   'Error:UserLocalPasswordValidator:UserPasswordPolicyBlacklist/ValidationFailed'
                );
                return new UserLocalPasswordValidity(
                   false,
                   $sMessage
                );
            }
         }
      }
      finally
      {
         fclose($handle);
      }
      return new UserLocalPasswordValidity(true);
   }
}

data/passwordBlacklist.txt 每行一个禁用密码。可使用 SecLists 中的前 10000 个常用密码。


原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:password-policy

2024/09/10 10:25 by127.0.0.1

版本:3_2_0/customization/password-policy.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1