nisbinoool / password-policy
一组密码策略,便于验证多种密码要求
Requires
- php: ^5.6 || ^7.0 || ^7.2 || ^7.4
Requires (Dev)
- friends-of-phpspec/phpspec-code-coverage: ^3.1 || ^4.1 || ^4.3
- phpmd/phpmd: ^2.6
- phpspec/phpspec: ^3.4 || ^5.1 || ^6.0
- phpunit/phpunit: ^5.7 || ^6.5 || ^8.5 || ^9.1
- povils/phpmnd: ^1.1 || ^2.2
- squizlabs/php_codesniffer: ^3.3
Suggests
- ext-json: Allows auto-decoding of JSON configuration
- ext-pspell: Required to enable the dictionary validation
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安装的库danielmiessler\SecLists- 来自[https://github.com/danielmiessler/SecLists]的相关文件
Policies- 单个密码策略
tests- PHPUnit测试(子目录遵循与src相同的布局)
修改、扩展、测试和贡献
Docker和Docker Compose
在Docker目录中提供PHP 5.6、7.0、7.2和7.4的Dockerfile,并在相应命名的目录中。在这些目录中,Dockerfile排除了composer的开发依赖项。包含开发依赖项和XDebug的Dockerfile.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。