Как обезопасить пароли базы данных в PHP? - PullRequest
382 голосов
/ 19 сентября 2008

Когда приложение PHP устанавливает соединение с базой данных, оно, конечно, обычно должно передавать логин и пароль. Если я использую один логин с минимальным разрешением для своего приложения, тогда PHP должен где-то знать этот логин и пароль. Каков наилучший способ защитить этот пароль? Кажется, просто писать это в коде PHP не очень хорошая идея.

Ответы [ 16 ]

5 голосов
/ 19 сентября 2008

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

Если у вас нет каких-либо средств, позволяющих процессу php-сервера получать доступ к базе данных, это практически все, что вы можете сделать.

4 голосов
/ 19 сентября 2008

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

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

3 голосов
/ 28 августа 2016

Мы решили это следующим образом:

  1. Использовать memcache на сервере с открытым соединением с другого сервера паролей.
  2. Сохраните в memcache пароль (или даже весь зашифрованный файл password.php) плюс ключ дешифрования.
  3. Веб-сайт вызывает ключ memcache, содержащий ключевую фразу файла паролей, и дешифрует в памяти все пароли.
  4. Сервер паролей отправляет новый зашифрованный файл паролей каждые 5 минут.
  5. Если вы используете зашифрованный password.php в своем проекте, вы включаете аудит, который проверяет, был ли этот файл обработан извне - или просмотрен. Когда это происходит, вы автоматически можете очистить память, а также закрыть сервер для доступа.
3 голосов
/ 21 сентября 2008

Лучший способ - вообще не хранить пароль!
Например, если вы работаете в системе Windows и подключаетесь к SQL Server, вы можете использовать встроенную аутентификацию для подключения к базе данных без пароля, используя идентификатор текущего процесса.

Если вам необходимо подключиться с помощью пароля, сначала зашифруйте его , используя надежное шифрование (например, используя AES-256, а затем защитите ключ шифрования, или используйте асимметричное шифрование и попросите ОС защитить cert), а затем сохраните его в файле конфигурации (вне веб-каталога) с сильными ACL .

3 голосов
/ 19 сентября 2008

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

<?php exit() ?>

[...]

Plain text data including password

Это не мешает вам правильно устанавливать правила доступа. Но в случае взлома вашего веб-сайта, «require» или «include» просто выйдут из скрипта в первой строке, поэтому получить данные еще сложнее.

Тем не менее, никогда не разрешайте файлы конфигурации в каталоге, к которому можно получить доступ через Интернет. У вас должна быть папка "Web", содержащая ваш код контроллера, css, картинки и js. Это все. Все остальное уходит в автономные папки.

3 голосов
/ 19 сентября 2008

Просто положить его в конфигурационный файл куда-нибудь, как это обычно делается. Просто убедитесь, что вы:

  1. запретить доступ к базе данных с любых серверов вне вашей сети,
  2. позаботьтесь о том, чтобы случайно не показывать пароль пользователям (в сообщении об ошибке или через PHP-файлы, случайно используемые как HTML и т. Д.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...