Совпадение пароля Codeigniter не работает с md5

0

Когда я использую следующий код в форме проверки, совпадения паролей не совпадают с двумя паролями, даже если оба пароля одинаковы.

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean|matches[rpassword]');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

Но когда я удаляю функцию md5, тогда совпадение паролей работает правильно.

Может кто-нибудь понять, почему это происходит?

  • 3
    Назовите это скрытым благословением . MD5 старый и считается сломанным. Для хранения пароля используйте CRYPT_BLOWFISH или функцию password_hash() PHP 5.5. Для PHP <5.5 используйте password_hash() compatibility pack .
  • 0
    Спасибо @ Фред-II-
Показать ещё 1 комментарий
Теги:
codeigniter

2 ответа

3
Лучший ответ

Когда вы выполняете совпадения [rpassword], он смотрит текущее значение пароля после md5, но rpassword перед md5.

Переключите его так, чтобы он выполнял проверку соответствия перед преобразованием в md5:

$this->form_validation->set_rules('password','Password','required|matches[rpassword]|md5|trim|xss_clean');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

Кроме того, если это приложение, в котором безопасность действительно имеет значение - пожалуйста, знайте, что md5 очень легко взломать, и что если кто - то сможет ли когда - нибудь попасть в вашу базу данных, что они смогут взломать все эти пароли. Таким образом, в основном использование md5 почти эквивалентно не шифрованию в первую очередь.

Для хранения паролей используйте функцию CRYPT_BLOWFISH или PHP 5.5 password_hash(). Для PHP <5.5 используйте password_hash() compatibility pack.

  • 0
    Отлично! Сейчас работает! Спасибо! Что вы предлагаете мне для безопасности?
  • 1
    Для этого пригодится комментарий Фреда - функции PHP_5_ password_hash и password_verify, или пакет совместимости, если у вас более старая версия PHP, предоставит вам эти методы.
Показать ещё 1 комментарий
0

Это происходит из-за того, что операция выполняется при сопоставлении "совпадений [rpassword]" перед переменной "rpassword", см. Ниже:

Ваш код:

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean|matches[rpassword]');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

Обновлено и работает:

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean|matches[password]');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню