Intereting Posts
PHP-интерком не работает после обновления композитора Лучшие практики для Post-Redirect-Get (PRG) с MVC в PHP PHP: необходимо дважды войти в систему до тех пор, пока не будут установлены переменные сеанса Symfony2 / Doctrine – создание объекта только в тестовой среде Как получить первые два значения строк в mysql и сравнить его со значением переменной пользовательского сеанса? как отображать изображение в td после успеха ajax Зависимость от инъекции и блок работы Ошибка 406 только от firebug Ошибка при отправке электронной почты с помощью phpmailer – Ошибка при передаче SMTP-сообщений: данные не принимаются TYPO3 6.1.7 новости подробности URL-адреса с параметрами получают на страницу 404 Возможные способы сортировки записей, в которых используются неанглийские шрифты? Искать в колонке JSON, используя красноречивый Laravel Когда нужно санировать код PHP и MySQL, прежде чем хранить его в базе данных или когда он отображается? Шаблон Singleton в php Проверьте, существует ли свойство

Использование Md5 для хэша паролей в компоненте Auth Cakephp 2.x

У меня есть существующий веб-сайт, построенный с использованием CakePhp 1.3. На этом веб-сайте я использовал алгоритм MD5 для хэша паролей.

Теперь я хочу обновить версию CakePhp до версии 2.3.5, но я не могу использовать MD5 для хэша паролей.

Я хотел бы знать, почему я не могу использовать MD5 в CakePhp 2.x. ?

Related of "Использование Md5 для хэша паролей в компоненте Auth Cakephp 2.x"

Не используйте md5 для паролей

md5 не является подходящим алгоритмом хеширования для хеширования паролей, не используйте его. Есть много, много ссылок, которые объясняют, почему – в том числе руководство php :

Почему обычные функции хэширования, такие как md5 () и sha1 (), непригодны для паролей?

Алгоритмы хеширования, такие как MD5, SHA1 и SHA256, разработаны очень быстро и эффективно. Благодаря современным технологиям и компьютерному оборудованию стало тривиально «грубой силой» выхода этих алгоритмов, чтобы определить исходный вход.

Из-за того, насколько быстро современный компьютер может «отменить» эти алгоритмы хеширования, многие специалисты по безопасности настоятельно рекомендуют использовать их для хэширования паролей.

Как изменить хэш-алгоритм по умолчанию

Вы можете изменить алгоритм хеширования по умолчанию, используя setHash , рекомендуемый алгоритм хеширования для паролей – это blowfish:

 Security::setHash('blowfish'); 

Как обрабатывать существующие пароли

Если вы действительно этого хотите, вы можете просто сменить setHash на использование md5.

Но это не очень хорошая идея.

Не ставьте под угрозу безопасность нового / обновленного приложения, чтобы удовлетворить плохую безопасность старого. Вместо использования одного и того же хеш-алгоритма (и соли) в качестве предыдущего приложения вы можете использовать логику, такую ​​как следующий (псевдоиш-код):

 $username = $this->data['User']['username']; $plainText = $this->data['User']['password']; $user = current($this->User->findByUsername($username)); Security::setHash('blowfish'); $blowfished = Security::hash($plainText, 'blowfish', $user['password']); if ($blowfished === $user['password']) { return true; // user exists, password is correct } $oldSalt = Configure::read('configure.this'); $md5ed = Security::hash($plainText, 'md5', $oldSalt); if ($md5ed === $user['password']) { $this->User->id = $user['id']; $blowfished = Security::hash($plainText); $this->User->saveField('password', $blowfished); return true; // user exists, password now updated to blowfish } return false; // user's password does not exist. 

Такая логика не сложна и предотвращает необходимость использования алгоритма «плохой хэш».

Я не рекомендую использовать этот код в любом сценарии, когда-либо. MD5 – это ужасный алгоритм хэширования для обеспечения безопасности, поскольку он слишком ресурсоемкий, чтобы препятствовать растрескиванию. Он также обнаружил уязвимости. Используйте bcrypt или SHA-512.

Для этого вы можете редактировать AppController.php следующим образом:

 <?php // AppController.php public function beforeFilter() { Security::setHash('md5'); } ?> 

Однако это не рекомендуется, так как MD5 – очень плохой алгоритм хэширования паролей . Вы намного лучше добавляете функцию, позволяющую пользователям входить в систему с существующими паролями md5 , поощряя их обновлять до нового хэша и не позволяя новым пользователям устанавливать пароли MD5.

Если вместо этого вы хотите использовать защищенную функцию, например, bcrypt , вы можете сделать следующее:

 <?php // AppController.php public function beforeFilter() { Security::setHash('blowfish'); } ?> 

При сравнении значений обычного текста с хэшами вы должны передать исходный хеш в качестве значения соли для сохранения параметров затрат и т. Д .:

 $newHash = Security::hash($newPassword, 'blowfish', $storedPassword);