Как обезопасить пароли базы данных в PHP?

Для меня единственный способ получить представление о окне терминала (все еще неверно, когда изменяется размер окна) - использовать команду типа

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "mode con");
pb.redirectError(ProcessBuilder.Redirect.INHERIT);

. При запуске без части cmd.exe , это показывает, что команда не найдена. Также обратите внимание на часть redirectError. Если не используется, тогда будет использоваться размер вывода Java, а не фактический. Только с этой комбинацией можно было захватить фактический размер.

386
задан AviD 13 January 2011 в 07:53
поделиться

12 ответов

Несколько человек неправильно читают это как вопрос о как к хранилище пароли в базе данных. Это неправильно. Именно о то, как сохранить пароль, позволяет Вам добраться до база данных.

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

227
ответ дан Farray 13 January 2011 в 07:53
поделиться

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

  1. запрещают доступ к базе данных с любых серверов вне Вашей сети,
  2. заботятся, чтобы не случайно показать пароль пользователям (в сообщении об ошибке, или через файлы PHP, случайно подаваемые в качестве HTML, и так далее.)
3
ответ дан Raptor 13 January 2011 в 07:53
поделиться

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

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

3
ответ дан AviD 13 January 2011 в 07:53
поделиться

Дополнительный прием должен использовать PHP отдельный конфигурационный файл, который похож на это:

<?php exit() ?>

[...]

Plain text data including password

Это не препятствует тому, чтобы Вы установили правила доступа правильно. Но в случае взламывается Ваш веб-сайт, "требовать" или "включать" просто выйдут из сценария в первой строке, таким образом, будет еще более трудно получить данные.

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

3
ответ дан e-satis 13 January 2011 в 07:53
поделиться

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

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

4
ответ дан Jason Wadsworth 13 January 2011 в 07:53
поделиться

Если Вы используете PostgreSQL, то это смотрит в ~/.pgpass для паролей автоматически. См. руководство для получения дополнительной информации.

7
ответ дан Jim 13 January 2011 в 07:53
поделиться

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

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

5
ответ дан Chris 13 January 2011 в 07:53
поделиться

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

mysql_connect("localhost", "me", "mypass");

Иначе лучше сбрасывать учетные данные после оператора подключения, потому что учетные данные, которые не находятся в памяти, не могут быть чтение из памяти ;)

include("/outside-webroot/db_settings.php");  
mysql_connect("localhost", $db_user, $db_pass);  
unset ($db_user, $db_pass);  
10
ответ дан Bob Fanger 13 January 2011 в 07:53
поделиться

Для чрезвычайно защищенных систем мы шифруем пароль базы данных в конфигурационном файле (который самом защищается системным администратором). На запуске приложения/сервера приложение тогда предлагает системному администратору ключ расшифровки. Пароль базы данных тогда читается из файла конфигурации, дешифровал и сохранил в памяти для будущего использования. Все еще 100%, безопасных, так как это хранится в дешифрованной памяти, но Вы не должны называть его 'достаточно безопасным' в какой-то момент!

34
ответ дан pdavis 13 January 2011 в 07:53
поделиться

Сохраните их в файле вне веб-корня.

39
ответ дан da5id 13 January 2011 в 07:53
поделиться

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

Кроме этого Вы находитесь на правильных строках с минимальным доступом для используемой учетной записи. Добавьте к этому

  • , не используют комбинацию имени пользователя/пароля ни для чего больше
  • , Настраивают сервер базы данных, чтобы только принять соединения от веб-хоста к тому пользователю (localhost, еще лучше, если DB находится на той же машине), Тот путь, даже если учетные данные представлены, они бесполезны любому, если у них нет другого доступа к машине.
  • Запутывают пароль (даже ROT13 сделает), это не поднимет много защиты, если некоторые действительно получат доступ к файлу, но по крайней мере это предотвратит случайный просмотр его.

Peter

7
ответ дан Vagnerr 13 January 2011 в 07:53
поделиться

Если вы размещаете на чужом сервере и не имеете доступа за пределами вашего корневого веб-сайта, вы всегда можете поместить свой пароль и / или соединение с базой данных в файл, а затем заблокировать файл с помощью .htaccess:

<files mypasswdfile>
order allow,deny
deny from all
</files>
101
ответ дан 22 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: