Подтвердить что ты не робот

Password_compat для старой версии php

PHP 5.5 будет поддерживать функции пароля password_hash() и password_verify(). Также есть файл, чтобы добавить эти функции в > 5.3.7.

Моя проблема в том, что в настоящее время я запускаю пакет debian 5.3.3-7 + squeeze14.

Есть ли способ сделать эту функцию доступной с этой старой версией PHP?

4b9b3361

Ответ 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"