Какой самый безопасный способ шифрования пароля с использованием PHP без базы данных - PullRequest
2 голосов
/ 15 февраля 2011

Я работаю над приложением, и я не хочу, чтобы кто-нибудь выяснил алгоритм для имени пользователя / пароля администратора.

Я хотел бы прежде всего уточнить:

  1. Является ли безопасность сайта только из-за сложности алгоритмов?
  2. Какой самый безопасный метод, или, может быть, есть какая-нибудь ссылка на исходный код GPL, которую вы можете порекомендовать?(Разве это не осуществимо, поскольку алгоритмы доступны любому, кто может определить, откуда я получил исходный код?)
  3. Я не , использующий MySQL для своего приложения, я нев этом нет необходимости.

Что вы посоветуете, как я могу обезопасить себя, не тратя денег.Время - это роскошь, которую я имею .Просто PHP и минимальный JavaScript.

Ответы [ 6 ]

5 голосов
/ 15 февраля 2011

Вам нужен алгоритм хеширования (например, md5 или sha1), он «односторонний», то есть вы можете легко хешировать строку, такую ​​как пароль, и сравнивать полученный хеш с вашим сохраненным хешем. Однако вы не можете взять хеш и преобразовать его обратно в пароль.

См. http://gr.php.net/manual/en/function.sha1.php для функции sha1.

MD5 и SHA1 - это хорошо известные алгоритмы, SHA1 является более безопасным, поскольку существуют современные механизмы, облегчающие грубое хеширование MD5-хэшей.

4 голосов
/ 15 февраля 2011

Пароли НЕ ДОЛЖНЫ быть зашифрованы , это явное нарушение CWE-257 .Пароли всегда должны быть хэшированы, и SHA256 - очень хороший выбор.

SHA256 является чрезвычайно мощным и очень безопасным, потому что он общедоступен и доступен для строгого аудита.Использование частного алгоритма избегается в secuirty, как он называется "(в) безопасность, хотя неизвестность "

3 голосов
/ 15 февраля 2011

Я предлагаю использовать хеш-функцию, которая была специально разработана для использования в качестве хэша пароля, например bcrypt , в отличие от стандартных хеш-функций, таких как SHA256. Это усложняет взлом паролей в случае утечки хешей.

3 голосов
/ 15 февраля 2011

Я бы порекомендовал вам начать с чтения этой статьи: http://phpsec.org/articles/2005/password-hashing.html

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

2 голосов
/ 15 февраля 2011

Ваш вопрос, по-видимому, подразумевает, что зашифрованный пароль каким-то образом доступен из сети.

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

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

В приведенной выше статье Википедии есть список рассылки с различными алгоритмами и текущими оценками сложности восстановления зашифрованного пароля для каждого случая.

Большинство современных сред уже поддерживают самые мощные из этих алгоритмов.Для PHP:

http://php.net/manual/en/function.sha1.php

http://php.net/manual/en/function.hash.php

Второй предоставляет несколько вариантов выбора ...

РЕДАКТИРОВАТЬ:

Имейте в виду, что даже самый лучший алгоритм хеширования не очень поможет, если выбранный вами пароль будет johnycash или что-то такое же простое для угадывания с помощью атаки методом словарного перебора.

Довольно часто самые слабыессылка на систему лежит в людях, которые ее используют ...

1 голос
/ 15 февраля 2011

Re: «Является ли безопасность сайта только сложностью алгоритмов?»

Нет, вам нужно многое сделать, чтобы обезопасить сайт.

Некоторые вещи, которые вы должны предотвратить:

  • SQL-инъекция
  • Инъекция кода
  • Обратный путь в каталогах
  • Межсайтовый скриптинг
  • Внедрение параметра Flash
  • Сессия угон
  • Перебор пароля
  • Подделка межсайтовых запросов
  • Человек посередине

и, вероятно, еще много ...

...