Где вы храните свои PHP скрипт конфигурации, такие как данные доступа к БД?

У меня есть файл config.php, где я просто делаю огромный массив, содержащий всю конфигурацию фреймворка. Кроме того, источник строки источника базы данных, такой как "mysql: host = localhost; dbname = mydb" (что называется, btw?) И имя пользователя + пароль для БД. Я боюсь, что это:

  • глупы
  • Нехорошо; лучшее решение там
  • не защищен (?)

так как это делают эксперты PHP?

Ответ 1

Как это сделать, но вы также можете попробовать некоторые из этих решений:

  • Сохраните файл конфигурации вне веб-папки (для этого требуется, чтобы конфигурация open_basedir в PHP отключена).
  • Ограничьте доступ к файлу конфигурации с помощью .htaccess:

    < Местоположение /config.php >   Отказаться, разрешить   Отказаться от всех </& Расположение GT;

  • Используйте файлы .ini и parse_ini_file (это не само по себе решение, но может быть объединено с другими)

Ответ 2

Если у вас есть папка www, httpdocs или public_http или что-то в этом роде, где расположено ваше приложение php, тогда хорошая практика - поместить файл конфигурации за пределы этой папки и просто получить к нему доступ например:

include "../config.php";

Никто не может получить доступ к этому файлу без доступа к FTP, и поэтому он относительно безопасен по сравнению с наличием в папке приложения.

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

Ответ 3

Я храню его в файле конфигурации обычного текста ini, обычно над корнем веб-сайта, чтобы не разрешать пользователям доступ к нему. В тех случаях, когда он доступен, у меня обычно есть файл .htaccess с deny from all, чтобы предотвратить доступ к нему.

Сохранение его в файле PHP, доступном для пользователей, должно быть прекрасным, но это не идеально. Если дескриптор правильно обрабатывает файлы PHP, даже если люди могут получить доступ к файлу, они не могут получить доступ к значениям, поскольку они просто получают вывод (ничего). Есть, конечно, проблемы с этим (см. Комментарии).
Использование PHP файлов является наиболее распространенным методом с PHP-проектами (как FOSS, так и коммерческими), которые я использовал. Большинство из них не сохранили их выше корня сети. При любой стабильной настройке на самом деле очень мало места для хранения вашего файла конфигурации над корнем веб-сайта, хотя данный Закон Мерфи стоит сделать, если вы можете (это или использовать .htaccess или равноценность для вашего сервера, чтобы лишить пользователя доступа к каталогу)

Ответ 4

Почему хранить имя пользователя и пароль БД в "config.php" не так? пока я знаю, данные в этом файле не могут быть показаны публично.

например.

<?php
$DB_User = "amindzx";
$DB_Pass = "Something";

// connect to DB and so on.
?>

если только хакер не сможет получить доступ к вашему FTP.

Ответ 5

Почему это глупо хранить простой файл config.php без каких-либо ценных бумаг? Даже если программист находит этот файл, он ничего не может сделать, потому что, как сказал amindzx, "этот файл не может быть показан публично". Или я ошибаюсь?

Ответ 6

С конфиденциальными данными, такими как учетные данные базы данных или платежного шлюза, и когда у меня есть контроль над сервером, мне нравится добавлять в конфигурацию своего виртуального хоста apache следующие строки:

SetEnv DB_USER "myuser"
SetEnv DB_PASS "mypass"

В вашем PHP вы можете получить доступ к ним с помощью $_SERVER ['DB_USER']. Вы можете сделать этот конфигурационный файл доступным только для root, который вы никогда не сможете сделать с файлом, который php обращается во время выполнения. Одно предостережение. Обязательно отключите php_info и не подвергайте эти переменные чем-то глупому как print_r ($ _ SERVER). (Большая часть этого перефразируется или украдена из здесь.)

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

class Application
{
    const CONTACT_EMAIL = "[email protected]";
}

usage:
$contactEmail = Application::CONTACT_EMAIL;

Ответ 7

Я обычно храню настройки в файле config.php, такие как настройки подключения к базе данных, пути к файлам и т.д.