Где лучшее место для хранения пароля для сайта? - PullRequest
6 голосов
/ 17 февраля 2011

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

Проблема в том, что я не знаю, где хранить соль на своем сайте.Прямо сейчас это находится в методе PHP, который выполняет алгоритм хеширования.Должен ли я хранить его в файле за пределами / var / www /, чтобы PHP открывал и читал файл?Я не хочу хранить его в базе данных, потому что это лишило бы цели иметь две соли, если бы моя база данных была скомпрометирована.

Есть предложения?

Ответы [ 5 ]

11 голосов
/ 17 февраля 2011

Один вариант еще не упомянут?Переменная среды, обслуживаемая сервером.Вы можете сделать это в httpd.conf или в .htaccess.Поскольку Apache не обслуживает файлы .htaccess, вам не нужно беспокоиться о его сокрытии ...

SetEnv WEBSITE_SALT 232lhsdfjaweufha32i4fv4239tauvkjn

Таким образом, все, что вам нужно сделать в вашем приложении - это $salt = getenv('WEBSITE_SALT');.Преимущество здесь в том, что оно прозрачно для приложения ...

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

Да, храните его в конфигурационном файле PHP где-нибудь, предпочтительно в папке над каталогом, являющимся корневым веб-каталогом.

0 голосов
/ 17 февраля 2011

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

Я видел много людей, которые на самом деле хранили соль в базе данных в поле аккаунтов. Вот поворот, хотя. Он был сгенерирован уникально при создании аккаунта, поэтому у каждого пользователя есть уникальная соль.

Хотя дело не в соли, а в том, как вы шифруете данные.

sha1($password.md5(md5($password.md5($salt))))

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

0 голосов
/ 17 февраля 2011

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

$this_is_not_the_salt_you_are_looking_for = base64_decode(.... encoded salt string here ...);

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

0 голосов
/ 17 февраля 2011

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

...