При подключении к базе данных MySql с помощью PHP, является ли плохой идеей изменить конфигурацию базы данных на основе пользовательского ввода?

0

Извините, если заголовок не ясен, я в проекте, где мы создаем приложение для Android, которое подключается к базе данных MySql для отображения некоторых данных. Мы используем PHP для подключения к базе данных, и мы используем dbconfig.php, который содержит что-то вроде:

define("servername", "host");
define("username", "username");
define("password", "password");
define("database",  "database");

Поскольку мы часто подключаемся к базам данных, размещенным на разных серверах, нам приходилось вручную изменять dbconfig каждый раз перед запуском приложения, поэтому мы думаем позволить пользователю написать эту информацию в самом приложении. Я думал, что приложение отправит запрос POST, а dbconfig - что-то вроде этого:

define("servername", $_POST["host"]);
define("username", $_POST["username"]);
define("password", $_POST["password"]);
define("database",  $_POST["database"]);

Но я знаю, что dbconfig должен быть безопасным, поэтому мне неудобно динамически изменять dbconfig и выглядит как плохая идея. Каков наилучший способ достижения этого?

Редактировать: Это плохая идея, на другой ноте, как приложение, похожее на эту работу? Не потребовался бы ли какой-либо запрос POST для отправки учетных данных базы данных на серверный язык?

  • 1
    О, это очень плохая идея, так как ее можно использовать для угона. Я бы предложил сохранить статическую конфигурацию и переключать переменные в зависимости от выбора пользователя. Иметь список систем, таких как «Система 1», «Система 2», «Книги», «Музыка» или все, что вам нужно, и переключать учетные данные на основе этого значения.
  • 1
    Что нужно приложению, чтобы динамически менять хосты БД? Это система администратора базы данных? Если нет, то их значения должны быть жестко заданы в конфигурации или заданы как переменные среды в процессе развертывания.
Показать ещё 1 комментарий
Теги:

2 ответа

2

Это настоящая плохая идея, потому что:

  • вы передаете учетные данные через POST
  • вы не дезинфицируете/запрещаете учетные данные (содержимое $ _POST)
  • вы передаете свои учетные данные через HTTP (S) (или что-то еще)

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

  • 0
    Да, это плохая идея, я просто не был уверен, есть ли способ сделать это безопасно. Конечные точки REST - хорошая идея, но они думали о том, как пользователь может добавлять и удалять настройки базы данных из самого приложения, поэтому не существует «реального» фиксированного количества конечных точек. Я просто буду статично писать конфиг
0

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

$db = isset($_POST['db']) ? $_POST['db'] : 'default';

switch ($db) {
    case 'db1':
        $servername = 'host1';
        $username   = 'username1';
        $password   = 'password1';
        $database   = 'database1';
        break;
    case 'db2':
        $servername = 'host2';
        $username   = 'username2';
        $password   = 'password2';
        $database   = 'database2';
        break;
    default:
        $servername = 'default_host';
        $username   = 'default_username';
        $password   = 'default_password';
        $database   = 'default_database';
        break;
}

define("SERVERNAME", $servername);
define("USERNAME",   $username);
define("PASSWORD",   $password);
define("DATABASE",   $database);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню