nisbinoool/password-policy

一组密码策略,便于验证多种密码要求

v0.9.1 2020-05-12 11:40 UTC

This package is auto-updated.

Last update: 2024-09-12 21:22:16 UTC


README

这个库旨在实现B2B SaaS提供商中常见的可变密码策略。

在B2B环境中运营的SaaS提供商通常对不同客户有不同的密码策略要求。此库包含一组可独立配置的密码策略。还添加了功能,允许合并多个策略,当单个用户可以关联多个客户时可能使用这些策略。

兼容性与依赖性

此库已编写为与PHP5.6及更高版本兼容。每个版本都针对PHP 5.6、7.0、7.2和7.4进行了测试。随着PHP新版本的发布,它们可能被添加到测试套件中。在未来某个日期,将停止支持PHP 5.6。

以下PHP依赖项存在并在composer.json中强制实施:

  • ext-json - 用于启用对JSON配置的解释
  • ext-pspell - 用于启用词典单词检查

安装

建议通过composer安装此库。

composer install nibynool/password-policy

此库的2.0.0版本可能不再支持PHP 5.6。如果您正在使用旧版本的PHP,请确保您的composer.json文件中的版本约束允许此操作。

用法

手动实现

实现此库最快的方法是配置一组密码策略,然后验证密码。

<?php

use NibyNool\PasswordPolicy\PasswdPolicy;
use NibyNool\PasswordPolicy\Exceptions\PasswordValidationException;

$validator = new PasswdPolicy([
    'CharacterClassPolicy' => null,
    'CommonPolicy' => null,
    'DictionaryPolicy' => null,
    'LengthPolicy' => null,
]);

$password = 'password'; // TODO: Get the password from somewhere

try {
    $validator->validatePassword($password);
} catch (PasswordValidationException $exception) {
    // TODO: Handle an invalid password
}

数据库驱动实现

可以使用特别构建的数据库表驱动验证。

数据库表设计

示例表

数据检索

执行将您的用户与其所有关联公司链接所需的SQL,并从示例表中选择所有列。假设使用PDO,则使用PDOStatement::fetchAll(PDO::FETCH_ASSOC),然后可以直接使用PasswdPolicy::init()

<?php

use NibyNool\PasswordPolicy\PasswdPolicy;
use NibyNool\PasswordPolicy\Exceptions\PasswordValidationException;

$pdo = new PDO(); // TODO: provide database details
$sql = 'SELECT * FROM password_policy'; // TODO: Limit the results to relevant ones
$query = $pdo->query($sql);
$results = $query->fetchAll(PDO::FETCH_ASSOC);

$validator = PasswdPolicy::init($results);

$password = 'password'; // TODO: Get the password from somewhere

try {
    $validator->validatePassword($password);
} catch (PasswordValidationException $exception) {
    // TODO: Handle an invalid password
}

结构

此库中的目录结构已设置如下

  • .idea - JetBrains PHPStorm配置文件
  • .semaphore - SemaphoreCI CI管道配置
  • Docker - 用于测试目的的Docker配置文件
  • spec - PHPSpec测试(子目录遵循与src相同的布局)
  • src - 库的源代码
    • Exceptions - 异常定义
    • Interfaces - 接口定义
    • Libraries - 不能通过composer安装的库
    • Policies - 单个密码策略
  • tests - PHPUnit测试(子目录遵循与src相同的布局)

修改、扩展、测试和贡献

Docker和Docker Compose

在Docker目录中提供PHP 5.6、7.0、7.2和7.4的Dockerfile,并在相应命名的目录中。在这些目录中,Dockerfile排除了composer的开发依赖项。包含开发依赖项和XDebugDockerfile.test

在项目根目录中找到Docker Compose文件。`docker-compose.yml`使用每个PHP版本的Dockerfile,而`docker-compose.test.yml`使用每个版本的Dockerfile.test

如果对composer.json文件进行了任何更改,则需要重新构建容器。

Docker

您需要为每个版本的PHP调整以下命令。

docker build -f ./Docker/PHP5.6/Dockerfile --tag nibynool-passwd-policy-56:latest .

Docker Compose

这将为每个版本的PHP重建容器。

docker-compose up --build

测试

可以通过Docker或Docker Compose运行测试。如果已修改composer.json,请参考上方的Docker和Docker Compose部分。

Docker

您需要为每个版本的PHP调整以下命令。这假设您已经使用了上面提供的构建命令。

docker run nibynool-passwd-policy-56:latest

Docker Compose

这将运行每个版本的PHP的测试。

docker-compose up

CI流水线(即将推出)

自动化测试通过SemaphoreCI执行。已提供配置文件

JetBrains IDE

.idea目录中包含了配置文件,以通过PHPStorm IDE实现测试。

贡献

开源是一件美好的事情。我总是欢迎对我的任何项目做出贡献。如果您选择做出贡献,我唯一的要求是您包含适当的测试,并遵守在.editorconfig.idea/*文件中定义的代码标准。

版本控制

发布版本将遵循语义版本化2.0.0