Password_compat для старой версии php
PHP 5.5 будет поддерживать функции пароля password_hash()
и password_verify()
. Также есть файл, чтобы добавить эти функции в > 5.3.7.
Моя проблема в том, что в настоящее время я запускаю пакет debian 5.3.3-7 + squeeze14.
Есть ли способ сделать эту функцию доступной с этой старой версией PHP?
Ответы
Ответ 1
Итак, прежде чем я начну, позвольте мне ясно сказать одно. Я являюсь автором данной библиотеки (и патч для 5.5).
С учетом сказанного, то, что говорили другие, абсолютно верно. Причина, по которой 5.3.7 является минимальной версией, заключается в том, что все предыдущие версии имеют ошибку в реализации bcrypt, которая может привести к потере энтропии в паролях с использованием высокобайтных символов (кодовые точки >= 128).
Это основная причина, по которой 5.3.7 является минимальной версией. И я бы высоко предлагал модернизировать, по крайней мере, до 5.3.7, но, возможно, самое последнее (ряд важных проблем безопасности был обнаружен в не очень старых версиях).
Теперь, что вы можете сделать, если вы застряли в более низкой версии? Вы можете разветкить библиотеку и настроить $2y$
на $2a$
. Это по крайней мере заставит вас работать. Пароли, созданные таким образом, будут переносимыми с будущими версиями (библиотека предназначена для проверки старых crypt()
паролей).
Однако я бы рекомендовал, чтобы вы этого не делали. Просто перейдите на новую версию PHP. Это не так сложно (есть пакеты deb из dotdeb, которые могут сделать это для вас).
Если вы действительно застряли в старой версии, я бы предположил, что вы используете библиотеку, предназначенную для этого. Что-то вроде моего PasswordLib или PhPass (обратите внимание, что вы должны использовать только эту связанную версию библиотека, есть несколько других на github, которые сильно отличаются).
Ответ 2
PHP >= 5.3.7 требуется, потому что в эту версию включен исправленный алгоритм bcrypt 2y
. Предыдущий алгоритм 2a
был нарушен для паролей с байтами вне диапазона US-ASCII.
Есть хорошая вероятность, что ваша версия 5.3.3-7 + squeeze14 также включает это исправление. Распределения обычно остаются в определенной версии, но исправления безопасности backport (как этот).
Итак, вы должны просто проверить, доступен ли этот алгоритм, и если вы можете безопасно использовать password_compat.
changelog для пакета немного неясен. Он упоминает, что 2x
был добавлен, но не говорит, добавлен ли 2y
(но он, вероятно, был).
Ответ 3
Причина, по которой 5.3.7 была сделана, минимальная версия объясняется тем, что функция crypt()
с использованием bcrypt в более ранних версиях PHP выводит совершенно разные результаты в текущие версии.
Вы можете увидеть результат самостоятельно: http://3v4l.org/3cAZf
Используя следующий код:
<?php
var_dump(crypt('rasmuslerdorf', '$2y$07$usesomesillystringforsalt$'));
Выход для 5.3.7 - 5.3.16, 5.4.0 - 5.4.6
string (60) "$ 2y $07 $usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi"
Результат для 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.2 - 5.3.6
строка (13) "$ 25di0cl7EYZA"
Выход для 5.3.0 - 5.3.1
string (13) "$ 2v4FKr10WzJ2"