Когда приложение PHP создает соединение с базой данных, конечно, обычно требуется передать логин и пароль. Если я использую единственный доступ для минимального разрешения для своего приложения, тогда PHP должен знать где-то этот логин и пароль. Каков наилучший способ защитить этот пароль? Похоже, что просто писать его в PHP-код - не очень хорошая идея.Как защитить пароли базы данных в PHP?
ответ
Несколько человек неправильно понимают это как вопрос о том, как к хранить пароли в базе данных. Это не правильно. Речь идет о том, как сохранить пароль, который позволяет получить до базы данных.
Обычным решением является переход пароля из исходного кода в файл конфигурации. Затем оставьте администрирование и сохраните файл конфигурации до системных администраторов. Таким образом, разработчикам не нужно ничего знать о производственных паролях, и в вашем источнике-источнике нет записи пароля.
Спасибо. Если я это правильно пойму, тогда в файле php будет добавлен файл конфигурации, позволяющий ему использовать пароль. например Я создаю файл под названием «app1_db_cfg.php», в котором хранятся имя входа, pword и db. Тогда моя страница application.php включает «app1_db_cfg.php», и я в бизнесе! – user18359 2008-09-19 00:40:50
yep, я обычно делаю DEFINE ("DB_NAME", "mydb"); и т. д. также удобно определять все, что вы будете использовать на более чем странице, что вы, возможно, захотите изменить позже. – 2008-09-19 03:33:28
Простое сохранение пароля в файле конфигурации не намного безопаснее. Он должен быть надлежащим образом защищен, используя сильные списки ACL и надежное шифрование с помощью правильно защищенных ключей ... См. Мое сообщение ниже. – AviD 2008-09-21 19:23:54
Я думаю, что OP означает пароль базы данных.
Если кто-то не получает доступ к вашему серверу через FTP или SSH (в этом случае вы уже подключены), я бы не стал беспокоиться о сохранении паролей в текстовом формате в файлах PHP. Большинство приложений PHP, которые я видел, делают так, например phpbb.
Храните их в файле вне веб-корня.
А также, как упоминалось выше, вне контроля источника. – 2009-05-26 20:46:07
Поместите пароль базы данных в файл, сделайте его доступным только для чтения пользователю, обслуживающему файлы.
Если у вас нет средств, позволяющих процессу php-сервера обращаться к базе данных, это в значительной степени все, что вы можете сделать.
Если вы говорите о пароле базы данных, а не о пароле, поступающем из браузера, стандартная практика заключается в том, чтобы поместить пароль базы данных в файл конфигурации PHP на сервере.
Вам просто нужно убедиться, что файл php, содержащий пароль, имеет соответствующие разрешения. То есть он должен быть доступен только для веб-сервера и вашей учетной записи пользователя.
Просто поместить его в конфигурационный файл где-то так, как это обычно делается. Просто убедитесь, что вы:
- запретить доступ к базе данных с любых серверов за пределами вашей сети,
- ухода принять, чтобы случайно не показать пароль для пользователей (в сообщении об ошибке, или через PHP файлы случайный служили в качестве HTML, и т. д.)
Ваш выбор ограничен, так как вы говорите, что вам нужен пароль для доступа к базе данных. Один общий подход заключается в том, чтобы сохранить имя пользователя и пароль в отдельном файле конфигурации, а не в главном скрипте. Затем обязательно сохраните это за пределами основного веб-дерева. Это было, если есть проблема с веб-конфигурацией, которая оставляет ваши php-файлы просто отображаемыми в виде текста, а не исполняемыми, вы не указали пароль.
Помимо этого вы находитесь на правильных строках с минимальным доступом к используемой учетной записи.Добавьте к этому
- Не используйте комбинацию имени пользователя/пароля для чего-нибудь еще
- Настройка сервера баз данных только принимать соединения с веб-хостинга для этого пользователя (локальный еще лучше, если БД находится на одна и та же машина) Таким образом, даже если учетные данные подвергаются воздействию, они никому не нужны, если у них нет другого доступа к машине.
- Обфускание пароля (даже ROT13 будет делать), он не будет много защищать, если некоторые из них получат доступ к файлу, но, по крайней мере, это предотвратит его случайный просмотр.
Питер
Если вы используете PostgreSQL, то она выглядит в ~/.pgpass
паролей автоматически. См. the manual для получения дополнительной информации.
Дополнительная Хитрость заключается в том, чтобы использовать PHP отдельного конфигурационный файл, который выглядит следующим образом:
<?php exit() ?>
[...]
Plain text data including password
Это не мешает вам устанавливать правила доступа правильно. Но в случае взлома вашего веб-сайта «требуется» или «включить» просто выйдет из сценария на первой строке, поэтому получить данные еще сложнее.
Тем не менее, никогда не оставляйте файлы конфигурации в каталоге, доступ к которому можно получить через Интернет. У вас должна быть папка «Веб», содержащая код вашего контроллера, css, картинки и js. Это все. Все остальное идет в автономных папках.
, но тогда как скрипт php считывает учетные данные, хранящиеся в файле? – 2009-01-22 08:40:34
Вы используете fopen(), как для обычного текстового файла. – 2009-01-23 14:56:19
Для чрезвычайно безопасных систем мы шифруем пароль базы данных в файле конфигурации (который сам защищен системным администратором). При запуске приложения/сервера приложение затем запрашивает системный администратор для ключа дешифрования. Затем пароль базы данных считывается из файла конфигурации, дешифруется и сохраняется в памяти для будущего использования. Все еще не на 100% безопаснее, так как он хранится в дешифрованной памяти, но вы должны называть его «достаточно безопасным» в какой-то момент!
если возможно создать соединение с базой данных в том же файле, где хранятся учетные данные. Ввести учетные данные в инструкции connect.
mysql_connect("localhost", "me", "mypass");
В противном случае это лучше, чтобы сбросить учетные данные после подключения заявления, потому что учетные данные, которые не находятся в памяти, не может быть read from memory;)
include("/outside-webroot/db_settings.php");
mysql_connect("localhost", $db_user, $db_pass);
unset ($db_user, $db_pass);
Лучший способ, чтобы не хранить пароль вообще!
Например, если вы находитесь в системе Windows и подключаетесь к SQL Server, вы можете использовать встроенную проверку подлинности для подключения к базе данных без пароля, используя идентификатор текущего процесса.
Если вам необходимо связаться с паролем, первый шифровать это, используя сильное шифрование (например, с помощью AES-256, а затем защитить ключ шифрования, или с помощью асимметричного шифрования и имеют ОС защитить сертификат), а затем сохраните его в файле конфигурации (за пределами веб-каталога) с сильными списками ACL.
Если вы размещаете на чужом сервере и не имеете доступа к вашему веб-сайту, вы всегда можете поместить свой пароль и/или соединение с базой данных в файл, а затем заблокировать файл с помощью.htaccess:
<files mypasswdfile>
order allow,deny
deny from all
</files>
Самый безопасный способ - не иметь информацию, указанную в вашем PHP-коде вообще.
Если вы используете Apache, это означает, что вы должны установить данные о соединении в файле httpd.conf или файлах виртуальных хостов. Если вы это сделаете, вы можете вызвать mysql_connect() без параметров, что означает, что PHP никогда не будет выводить вашу информацию.
Это, как вы определяете эти значения в этих файлах:
php_value mysql.default.user myusername
php_value mysql.default.password mypassword
php_value mysql.default.host server
Затем открыть соединение MySQL, как это:
<?php
$db = mysqli_connect();
Или так:
<?php
$db = mysqli_connect(ini_get("mysql.default.user"),
ini_get("mysql.default.password"),
ini_get("mysql.default.host"));
Этот решение является общим, поскольку оно полезно как для открытых, так и для закрытых исходных приложений.
- Создайте пользователя ОС для вашего приложения. См http://en.wikipedia.org/wiki/Principle_of_least_privilege
- Создать (не сеанс) переменной среды OS для этого пользователя с паролем
- запустить приложение под именем этого пользователя
Преимущества:
- Вы не проверять ваши пароли в исходное управление случайно, потому что вы не можете
- Вы случайно не испортите права доступа к файлам. Ну, возможно, но это не повлияет на это.
- Может быть прочитано только root или этим пользователем. Root может читать все ваши файлы и ключи шифрования в любом случае.
- Если вы используете шифрование, как безопасно хранить ключ?
- Работы х-платформы
- Будьте уверены, чтобы не передать envvar к ненадежной дочерних процессов
Этот метод, предложенный Heroku, которые являются очень успешными.
Мы решили это таким образом:
- Использование Memcache на сервере, с открытым соединение с другого сервера паролей.
- Сохраните memcache пароль (или даже весь файл password.php зашифрованный) плюс ключ дешифрования.
- На веб-сайте вызывается ключ memcache, содержащий парольную фразу пароля, и дешифрует в памяти все пароли.
- Сервер паролей отправляет новый зашифрованный файл паролей каждые 5 минут.
- Если вы используете зашифрованный пароль.php в своем проекте, вы отправляете аудит, проверяющий, был ли этот файл тронут внешне - или просмотрен. Когда это произойдет, вы автоматически можете очистить память, а также закрыть сервер для доступа.
Ранее мы сохранили пользователь DB/пасс в файле конфигурации, но с тех пор хит параноидной режиме - принятие политики обороны Глубины.
Если ваше приложение скомпрометировано, у пользователя будет доступ к чтению в файл конфигурации, и есть вероятность, что взломщик сможет прочитать эту информацию. Файлы конфигурации также могут попасть в управление версиями или скопировать серверы.
Мы переключились на сохранение пользователя/пароля в переменных среды, установленных в Apache VirtualHost. Эта конфигурация читается только с помощью root - надеюсь, ваш пользователь Apache не работает как root.
Кон таким образом, что пароль теперь находится в глобальной переменной PHP.
Чтобы уменьшить этот риск, мы имеем следующие меры предосторожности:
- Пароль шифруется. Расширяем класс PDO, чтобы включить логику для дешифрования пароля. Если кто-то читает код, где мы устанавливаем соединение, не будет очевидно, что соединение устанавливается с зашифрованным паролем, а не с самим паролем.
- Зашифрованный пароль перемещается из глобальных переменных в закрытую переменную Приложение делает это немедленно, чтобы уменьшить окно, доступное в глобальном пространстве.
phpinfo()
отключен. PHPInfo - это легкая цель получить обзор всего, включая переменные среды.
- 1. Как защитить пароли базы данных, настроить файл в PHP?
- 2. Как защитить свои пароли?
- 3. Как защитить пароли в приложении Android
- 4. Как я могу защитить пароли данных localstorage?
- 5. Как защитить пароли, хранящиеся в web.config?
- 6. Как хранить пароли в таблице базы данных
- 7. Как защитить конфиденциальные пароли, хранящиеся в базе данных
- 8. хранить/читать пароли в/из базы данных
- 9. Как сопоставить пароли базы данных толпы?
- 10. Как получить пароли из базы данных
- 11. Как защитить отдельные базы данных в RethinkDB?
- 12. Как защитить пароли на мобильном телефоне
- 13. Безопасно хранить пароли внешней базы данных
- 14. используя htaccess, чтобы скрыть пароли базы данных
- 15. php post пароли?
- 16. Как защитить имена пользователей, пароли и количество пользователей
- 17. Как безопасно хранить пароли в базе данных?
- 18. Как защитить файл базы данных Android?
- 19. Имена пользователей и пароли из базы данных с php
- 20. Где вы храните пароли базы данных?
- 21. Возможно ли защитить пароли базы данных SQL-сервера даже от администраторов сервера?
- 22. как защитить ajaxRequest.open php script
- 23. Как защитить конфиденциальные пароли в моих веб-приложениях/службах C#?
- 24. Как защитить файл конфигурации базы данных в проекте?
- 25. Как защитить логин php-mysqli?
- 26. Как защитить Android-php-соединение?
- 27. Как защитить ajax-вызов (JS-PHP)
- 28. Как защитить пароли на AppHarbor-приложение, с сервис-крюком GitHub
- 29. Как хранить многопользовательские пароли?
- 30. Как защитить учетные данные базы данных, имеющиеся в базе данных.yml
Вы имеете в виду пароли пользователей или пароль базы данных, используемые в строке подключения? – 2008-09-18 23:31:55
Пароль базы данных, используемый в строке подключения. Благодаря! – user18359 2008-09-19 00:29:44