Предупреждение PHP: Использование неопределенной константы PASSWORD_ARGON2ID при использовании password_hash() в php 7.3
Недавно я установил PHP 7.3.6 через веб-интерфейс Plesk для разработки копии веб-приложения, так как намерен обновить нашу производственную среду с php 7.0 до 7.3. Я решил воспользоваться возможностью обновить хэширование паролей с PBKDF2 до Argon2ID, поскольку оно уже включено в ядро PHP. Я был удивлен, получив предупреждение о том, что константа PASSWORD_ARGON2ID не определена, так как я понимаю, что она была добавлена в php 7.3.0.
Я попытался найти любой экземпляр этой ошибки, и единственное, что я нашел, было уместным, это незавершенное сообщение на форуме Laravel:
Приложение размещается на общем VPS с MediaTemple. Centos 7, используя nginx в качестве обратного прокси через Apache. Это поддомен для разработки под управлением 7.3.6 вместе с основным доменом, на котором выполняется рабочая версия приложения, 7.0.33.
$this->password = password_hash('password123', PASSWORD_ARGON2ID, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));
Я ожидал, что константа PASSWORD_ARGON2ID будет определена, но она была объявлена как неопределенная:
Use of undefined constant PASSWORD_ARGON2ID - assumed 'PASSWORD_ARGON2ID' (this will throw an Error in a future version of PHP)
1 ответ
Этот алгоритм доступен, только если PHP был скомпилирован с поддержкой Argon2. - password_hash
Если вы хотите использовать его, когда он доступен, я бы рекомендовал проверить с defined
или же возврат к алгоритму по умолчанию.
if(defined('PASSWORD_ARGON2ID')) {
$hash = password_hash('password123', PASSWORD_ARGON2ID, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));
} else {
$hash = password_hash('password123', PASSWORD_DEFAULT, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));
}
Мне удалось избавиться от предупреждения, установив модуль натрия.
дебиан / убунту: sudo apt-get install php-sodium
centos / rhel: sudo yum install php-sodium