Функция склеивания YII2, которая работала, остановлена - PullRequest
0 голосов
/ 04 марта 2020

У меня есть страница на моем сайте, на которой пользователь может сменить пароль, но как часть формы он должен ввести старый пароль. В модели у меня есть проверка, чтобы убедиться, что старый пароль, введенный в форму, совпадает с паролем в базе данных

    public function oldPasswordCheck($attribute, $params)
    {
        $old_password = $this->attributes['password'];
        if (crypt($this->old_password, $old_password) != $old_password)
        {
            $this->addError('old_password', 'This is not the old password');
        }
    }

Это работало до недавнего времени, но по какой-то причине сейчас, если вы введете правильный старый пароль, он все еще говорит, что они не совпадают.

Любые указатели будут высоко оценены.

1 Ответ

0 голосов
/ 05 марта 2020

Некоторые возможные ответы:

1) Ваш параметр salt

Php crypt () использует два параметра: crypt ( string $str [, string $salt ] ). Кажется, вы используете пароль в качестве соли, что является очень плохой практикой. Это так или вы просто путаете параметр salt? Я также рекомендовал бы всегда сравнивать пароли с php hash_equals () , потому что crypt () уязвим для временных атак .

2) изменений на вашем сервере. configuration

Какой тип конфигурации ha sh ваша php используется для шифрования / дешифрования строк?:

В системах, где функция crypt () поддерживает несколько типов ha sh, следующие константы устанавливаются в 0 или 1 в зависимости от того, доступен ли данный тип: CRYPT_STD_DES, CRYPT_EXT_DES, CRYPT_MD5, CRYPT_BLOWFISH, CRYPT_SHA256 and CRYPT_SHA512. Если вы недавно изменили конфигурацию своего сервера, некоторые из них могут быть недоступны. Проверьте это с помощью phpinfo()

Рекомендация

Вы работаете с фреймворком, и Yii, как и каждый фреймворк, имеет свой собственный класс для шифрования и дешифрования строк. Взгляните на yii класс безопасности . Это облегчит вашу жизнь.

...