mysql_real_escape_string () все еще требуется с md5 ()? - PullRequest
0 голосов
/ 03 августа 2011

Я просто прохожу некоторый код и проверяю, что весь пользовательский ввод выполняется через mysql_real_escape_string () для предотвращения SQL-инъекций. Для ввода пароля, который запускается через функцию PHP md5 (), mysql_real_escape_string (0 все еще необходимо?) Казалось бы, процесс кодирования избавит от потенциальных атак внедрения.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2012
  1. MD5 не достаточно для безопасности пароля - MD5 - старый алгоритм, который легко взломать; если вы используете MD5 для хеширования паролей, вы можете вообще ничего не использовать. В настоящее время рекомендуется использовать алгоритм bcrypt.

  2. mysql_real_escape_string() вместе с остальными функциями mysql_xxx() устарела. Они считаются устаревшими и небезопасными и не рекомендуются для использования в течение некоторого времени. Предстоящий PHP v5.5 официально объявит их устаревшими, но вы должны попытаться прекратить их использование, даже если вы еще не планируете обновление до 5.5. См. Почему я не должен использовать функции mysql_ * в PHP? для получения дополнительной информации об этом.

Как я уже сказал, MD5 небезопасен, как и большинство решений, которые люди пишут для себя. Лучшее решение для хеширования паролей - это использовать библиотеку хорошего качества, которая сделает всю работу за вас. PHP 5.5 будет включать в себя набор специально написанных функций обработки паролей, которые значительно облегчат безопасность. Существует также версия этой библиотеки, которая была портирована для работы в PHP 5.3 или 5.4. Вы можете скачать эту версию бэкпорта здесь: https://github.com/ircmaxell/password_compat

На данный момент это, вероятно, единственное лучшее решение для хранения паролей, доступное в PHP. Я настоятельно рекомендую вам использовать его.

2 голосов
/ 03 августа 2011

На самом деле, да и нет.

Вам нужно только , чтобы использовать , чтобы использовать mysql_real_escape_string(), если для 2-го параметра md5() установлено значение true - при этом создается хэш RAW md5.

В противном случае единственными данными, возвращаемыми чем-то вроде md5($password), будет строковый хеш, соответствующий этому регулярному выражению /[a-z0-9]{32}/i - которому не требуется для экранирования.

Эти ребята объясняют, почему и как они использовали необработанные хэши md5:

http://cvk.posterous.com/sql-injection-with-raw-md5-hashes

...