anatoliy-novoselov / labs
Some PHP snippets for everyday usage
Requires
- php: >=7.2.0
Requires (Dev)
This package is not auto-updated.
Last update: 2025-03-28 11:46:20 UTC
README
PHP Snippet-ы для ежедневного использования в PHP-проектах. По-возможности стараюсь добавлять автотесты.
Установка
/> composer require anatoliy-novoselov/labs
Password
Класс для работы с паролями
Константы
CHECK_UPPER_CASE
- обязательное наличие символов в верхнем регистреCHECK_LOWER_CASE
- обязательное наличие символов в нижнем регистреCHECK_DIGIT
- обязательное наличие цифрCHECK_SPEC
- обязательное наличие знаков препинанияCHECK_SPACE
- обязательное наличие пробелаCHECK_EASY
- обязательное наличиеCHECK_LOWER_CASE
иCHECK_DIGIT
CHECK_MEDIUM
- обязательное наличиеCHECK_EASY
иCHECK_UPPER_CASE
CHECK_STRONG
- обязательное наличиеCHECK_MEDIUM
иCHECK_SPEC
CHECK_IMPOSSIBLE
- обязательное наличиеCHECK_STRONG
иCHECK_SPACE
CHECK_ANY
- наличие символов не регламентируетсяHASH_PASSWORD_SALT_ENVIRONMENT_KEY
- переменная среды, в которой хранится соль для паролейCOMPLEXITY_RETURN_AS_FLOAT
- получить значение сложности пароля какfloat
COMPLEXITY_NONE
- очень простой пароль (или входит в топ самых популярных)COMPLEXITY_LOW
- простой парольCOMPLEXITY_MEDIUM
- нормальный парольCOMPLEXITY_STRONG
- хороший парольCOMPLEXITY_IMPOSSIBLE
- отличный (сложный) пароль
Переменные
$HASH_PASSWORD_SALT
- общая соль для паролей, еслозьуется если нет возможности хранить в переменных среды
Методы
Проверка пароля
check(string $password, int $rules, int $minLength = 6, float $maxLength = INF)
-
проверка пароля по определенным правилам и длине. Правила описаны в константах, начинающихся с префикса CHECK_
.
<?php
...
$validate = \Snippet\Password::check('fooBar', \Snippet\Password::CHECK_UPPER_CASE | \Snippet\Password::CHECK_LOWER_CASE, 3, 6);
var_dump($validate);
/> bool(true)
Хеш пароля
hash(string $password, string $dispersion = '', string $salt = '')
- создается sha256
хэш от пароля с солью $salt
и дисперсией $dispersion
.
Дисперсия позволяет создавать хеши уникальными для разных пользователей с одинаковыми паролями. В качестве дисперсии лучше использовать дату регистрации пользователя или его идентификатор.
Лучше установить переменную среды PASSWORD_HASH_SALT
или переменную из \Snippet\Password::$HASH_PASSWORD_SALT_ENVIRONMENT_KEY
, она будет использована автоматически в качестве соли для пароля.
<?php
echo \Snippet\Password::hash('foobar', '1', '**s<dsOsP?');
/> dd79d7383ae053279bbd6481696c1d025543ad308e7f1567fa879625d851397e
Сложность пароля
complexity(string $password, bool $as_float = false)
возвращает сложность пароля в виде float
или int
со степенью сложности.
int
принимает одно из значений COMPLEXITY_NONE
, COMPLEXITY_LOW
, COMPLEXITY_MEDIUM
, COMPLEXITY_STRONG
или COMPLEXITY_IMPOSSIBLE
<?php
var_dump(\Snippet\Password::complexity('foobar') == \Snippet\Password::COMPLEXITY_LOW);
/> bool(true)