Безопасно ли размещать пароль в одной папке?
Вопрос
Я использую PHP и MySQL.У меня есть файл конфигурации базы данных (db-config.php), в котором указаны имя моей базы данных, имя пользователя и пароль.Хранение файлов конфигурации моего приложения и базы данных по адресу:www(httpdocs)/app/db-config.php
Это безопасно?Смогут ли другие/хакеры украсть мой файл и получить данные для входа в мою базу данных?
Или мне следует поместить его за пределы папки www, например:db-config.php хранится в папке www(httpdocs) того же уровня.Итак, в одном из моих приложений я просто делаю это:
include_once('../../db-config.php');
Будет ли это работать?Я имею в виду прыжок на 2 уровня вверх в папку root/www/httpdocs??
Есть ли у вас более безопасный способ хранения пароля базы данных??
Решение
Многие общедоступные программное обеспечение PHP обычно имеют файл конфигурации с паролями DB в каталоге в папке www Root, и до тех пор, пока ваш сервер настроен правильно, он должен быть в порядке.
Лучше сделать для любой конфиденциальной информации, такой как файл конфигурации с паролями, - это сохранить ее вне Корень документа (одна папка - это стандартная практика), и я бы порекомендовал.
Вы также можете предварительно включить пароль, прежде чем сохранить его в файле конфигурации, а затем заставить ваше программное обеспечение расшифровать его перед его использованием (но это только сохранило бы ваш пароль в Clear-Hacker, который имеет доступ к Sourcecode Ваши файлы смогут довольно легко расшифровать сохраненный пароль).
Другие советы
Надеемся, что пароль не напечатан на экран, но все еще лучше всего иметь его в каталоге, не доступной через Интернет, да. Это также хорошая идея для вашего веб -приложения использовать вход с минимальными необходимыми разрешениями.
Я запускаю свои веб -приложения в тюрьме Chroot, что означает, что в конечном итоге я подключаюсь к локальному соединению TCP вместо гнезда (например, я использую '127.0.0.1' вместо «Localhost»), поскольку сокет Unix не может быть Видно из тюрьмы.
Никто не может увидеть исходный код ваших файлов .php, пароль безопасен в любом месте, где вы его размещаете, особенно если вы храните его в папке своего сайта (который у вас есть полный контроль), Sinse вы не помещаете его в папку public_ftp. ..
Возможно, вы можете поместить его на один уровень над папкой public_html, только в [экстремальном] случае кто -то облажается httpd.conf, а PHP перестанут работать, поэтому будут обнаружены источники.
Если у вас достаточно контроля над веб -сервером, я рекомендую добавить каталог в PHP Включите_PATH директива. Тогда вы можете сказать что -то вроде:
в php.ini
include_path=/home/xxxx/php_includes:blah.blah.blah
в/home/xxx/php_includes:
create a directory named "config"
create a file named "config/database_config.php"
В ваших файлах PHP:
include_once("config/database_config.php")
Легко включить, и безопасно за пределами веб -корня.
РЕДАКТИРОВАТЬ:
Вы можете сделать это во время выполнения с set_include_path командование Кроме того, если вы используете Apache, я думаю, что вы можете установить это для каталога, поместив директивы php_admin_value в файле .htaccess (см. PHP документация)
Да, вы можете поместить файл в тот же или другой каталог
Сделать configuration file
, где вы можете сохранить все настройки в файле .. и вы можете сохранить его в любом месте. Все, что вам нужно, это звонить, когда вам это нужно.
Для этого файла конфигурации сделайте разрешение на файл неприемлемым для публики.
1. Сделайте файл config.ini
[local]
db_host = localhost
db_user = your_local_database_username
db_pass = **********
db_name = your_local_database_name
[server]
db_host = serverhost
db_user = your_local_database_username
db_pass = **********
db_name = your_server_database_name
2. Переместите и дайте разрешение на файл config.ini
3. Создайте свой PHP или страница подключения conn.php
<?php
$config_file_location_path = "/var/somelocation/config.ini"
$read_file = parse_ini_file($config_file_location_path, true);
$read_data = $read_file['local'];
$db_config = $read_data;
$db_host = $db_config['db_host'];
$db_user = $db_config['db_user'];
$db_pass = $db_config['db_pass'];
$db_name = $db_config['db_name'];
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
die("Could not connect to server : " . mysqli_errno($conn));
}
И если вы хотите поработать над server
Просто изменить $read_data = $read_file['server'];
Размещение включаемого файла на более высоком уровне будет работать.Я помещаю их в /var/www и использую
set_include_path(get_include_path() . PATH_SEPARATOR .'/var/www/'); require_once 'mysqli_connect.inc.php';
Пароли находятся в mysqli_connect.inc.php, но пользователи не могут видеть исходный код файлов PHP, поскольку PHP преобразует их в HTML перед отправкой в ваш браузер.
Предположительно, вы не позволяете браузерам видеть содержимое папок — никаких «индексов каталогов», как их называет Apache.