Безопасно ли размещать пароль в одной папке? - PullRequest
0 голосов
/ 28 августа 2009

Я использую 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 ??

Есть ли у вас более безопасный способ хранения пароля базы данных?

Ответы [ 6 ]

6 голосов
/ 28 августа 2009

У многих общедоступных программ PHP обычно есть файл конфигурации с паролями БД в каталоге в корневой папке www, и если ваш сервер настроен правильно, все должно быть в порядке.

Лучшая вещь, которую нужно сделать для любой конфиденциальной информации, такой как файл конфигурации с паролями, однако, это сохранить ее вне корня документа (одна папка вверх - стандартная практика) и это то, что я бы порекомендовал.

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

1 голос
/ 03 июля 2013

Да, вы можете поместить файл в тот же или другой каталог

Создайте 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'];

1 голос
/ 28 августа 2009

Если у вас достаточно контроля над веб-сервером, я рекомендую добавить каталог в директиву PHP include_path .Затем вы можете сказать что-то вроде:

в PHP.ini

include_path=/home/xxxx/php_includes:blah.blah.blah

в / home / xxx / php_include:

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 )

1 голос
/ 28 августа 2009

Никто не может видеть исходный код ваших файлов .PHP, пароль безопасен везде, где вы его размещаете, особенно если вы храните его в папке вашего сайта (который у вас есть полный контроль), потому что вы не помещаете его в папка public_ftp ...

Может быть, вы можете поместить его на один уровень выше папки public_html, просто в [крайнем] случае кто-то испортит httpd.conf, и PHP перестанет работать, чтобы открыть источники.

1 голос
/ 28 августа 2009

Надеемся, что пароль не выводится на экран, но все же рекомендуется хранить его в каталоге, не доступном напрямую через Интернет, да. Для вашего веб-приложения также неплохо использовать логин с минимально необходимыми разрешениями.

Я запускаю свои веб-приложения в изолированной тюрьме, что означает, что я подключаюсь через локальное TCP-соединение, а не через сокет (например, я использую «127.0.0.1» вместо «localhost»), поскольку сокет unix не видно изнутри тюрьмы.

0 голосов
/ 28 августа 2009

Размещение включаемого файла на более высоком уровне будет работать. Я помещаю их в / 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.

...