Предоставление учетных данных БД через среду и не жестко - PullRequest
0 голосов
/ 04 октября 2019

Я создаю веб-приложение и мне нужно подключиться к базе данных MySQL. Я в настоящее время использую PHP 7.3. Я подключаюсь к базе данных SQL стандартным способом PDO (new PDO(DB_DSN, DB_USER, DB_PASS)), но мне сказали следующее утверждение:

Учетные данные базы данных должны поступать из среды и не должны жестко кодироваться висходный код.

Однако я не уверен, как это сделать.

В настоящее время приложение размещается на сервере Linux, но переносится на сервер Azure. Но прежде чем мы сможем его перенести, они хотели бы, чтобы я изменил конфигурацию учетных данных SQL, как указано выше.

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

Ответы [ 3 ]

0 голосов
/ 04 октября 2019

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

1. Подготовьте свои файлы: -

  1. Создайте на сервере папку с именем "_secure".
  2. Создайте файл в разделе "_secure" с именем "creds.ini", содержащий username|password.
  3. Создайте файл в «_secure» с именем «.htaccess».

2. Защитите свои учетные данные: -

Внутри вашего файла .htaccess добавьте следующий текст: -

# Deny access to .htaccess
<Files .htaccess>
Order allow,deny
Deny from all
</Files>

# Disable directory browsing 
Options -Indexes

# Deny access to files with extensions .ini
<FilesMatch "\.(ini)$">
Order allow,deny
Deny from all
</FilesMatch>

3. Интеграция с PHP:

Внутри вашего php используйте следующий код: -

$creds = explode('|', file_get_contents("creds.ini"));
new PDO(DB_DSN, $creds[0], $creds[1]);

Вы должны настроить имена и код php в соответствии с вашим использованием, это только примеры кодов иимена.

0 голосов
/ 04 октября 2019

Предполагая, что ваша текущая установка Linux использует Apache в качестве веб-сервера, вы можете настроить переменные окружения в его файлах конфигурации (httpd.conf или .htaccess) следующим образом:

SetEnv DB_USER whatever

В случае, если его Nginx,это будет

fastcgi_param DB_USER whatever;

После этого можно будет получить доступ к таким значениям с помощью массива $_ENV, подобного этому

new PDO($dsn, $_ENV['DB_USER'], $_ENV['DB_PASS']);

(обратите внимание, что я бы не стал хранить весь DSN вокружение, поскольку оно слишком локализовано для PDO. Лучше хранить обычные параметры, такие как DB_HOST и DB_NAME, а затем вызывать DSN из них)

Поскольку Azure не использует ни того, ни другого, вам придется настраивать такие переменные Windows-way - вкакое-нибудь приложение с графическим интерфейсом, как описано в этом ответе Что может получить доступ к «Значениям ключа настроек приложения»?

Конечно, процесс должен повторяться для всех случаев, когда код запускается, на вашем локальном компьютере. например, сервер разработки.

0 голосов
/ 04 октября 2019

Хранение секретов в веб-приложениях является сложным, но большинство языков / фреймворков имеют способы сделать это.

В PHP один из способов сделать это - сохранить информацию в переменных среды, что затем вы можете извлечение во время выполнения. Например, вы можете использовать

$DB_DSN = $_SERVER["DB_DSN"];
$DB_USER = $_SERVER["DB_USER"];
$DB_PASS = $_SERVER["DB_PASS"];

Эти переменные среды можно установить , используя вкладку «Настройки приложения» в портале Azure .

Тогда в каждой среде (машины разработки, тестовые серверы, производственные серверы) эти переменные среды могут быть установлены по-разному.

Существует даже библиотека , которая поможет вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...