Будет ли изменение базы данных php / mysql создавать небезопасное соединение? - PullRequest
0 голосов
/ 28 марта 2019

Или: «Будет ли изменение базы данных php / mysql таким образом создавать небезопасное соединение?»

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

Каковы будут последствия и / или проблемы безопасности в следующем сценарии php / mysql?

// set up the standard database

// Connection codes:
$host="localhost";
$user="imauser";
$password="imapassword";
$dbname="liveDB";

$cxn = mysqli_connect ($host,$user,$password,$dbname)
    or die ("Couldn't connect to the server.");

// check if $testMode is active, and reset $cxn with a new (test) $dbname:

if($testMode == TRUE){
    $dbname="testDB"; // test database
    // reset the cxn:
    $cxn = mysqli_connect ($host,$user,$password,$dbname)
        or die ("Couldn't connect to the server.");
}

Это позволило бы мне переключать $ testMode на более высокий уровень в коде. Будет ли работать простая перезапись $ cxn, или у меня будет зависать открытое и активное соединение mysqli_connect?

Ответы [ 3 ]

2 голосов
/ 28 марта 2019

Лучше хранить учетные данные вашей базы данных отдельно от кода.На всякий случай, если кто-то найдет способ прочитать ваш код, он не увидит пароль вашей базы данных.

Сохраните учетные данные базы данных в файле конфигурации, который ваше приложение читает при запуске.Я бы использовал parse_ini_file () .

Вот пример файла конфигурации:

[database]
host=localhost
user=imauser
password=imapassword
dbname=liveDB

Вот как вы его прочитаете:

$config = parse_ini_file('config.ini', true);

Если я вывожу print_r($config), я вижу это:

Array
(
    [database] => Array
        (
            [host] => localhost
            [user] => imauser
            [password] => imapassword
            [dbname] => liveDB
        )

)

Таким образом, вы можете развернуть один и тот же код как в тестовой, так и в производственной среде, и вам нужно только заменить файл конфигурации в тесте ирабочие серверы.

ПРИМЕЧАНИЕ. Убедитесь, что вы не помещаете файл конфигурации в каталог, из которого веб-сервер может обслуживать файлы.Ваш PHP-код может читать файл из любого места на вашем сервере, поэтому убедитесь, что никто не может просто открыть файл конфигурации в браузере.

1 голос
/ 28 марта 2019

Я не вижу ничего, что я бы счел небезопасным в вашем коде. Однако, делать mysqli_connect() дважды кажется ненужным.

Вы можете создать для этого простую троичную ;

// set up the standard database

// Connection codes:
$host = "localhost";
$user = "imauser";
$password = "imapassword";

//use a ternary like this
$dbname = $testMode ? 'testDB' : 'liveDB';

$cxn = mysqli_connect($host, $user, $password, $dbname) or die("Couldn't connect to the server: " . mysqli_connect_errno());

Объяснение

Тройной в приведенном выше коде эквивалент до:

if($testMode == true) {
    $dbname = 'testDB';
} else {
    $dbname = 'liveDB';
}

Троицы могут быть просто объяснены следующим образом $variable = CONDITION ? TRUE : FALSE

Если у вас есть логическая переменная (например, $testMode); Вы можете проверить, является ли это истиной или ложью, проверяя это непосредственно как условие.

if($testMode) эквивалентно if($testMode == true).

Другие изменения

  • Я изменил ваш die() вызов, чтобы отобразить ошибку, если она не может подключения.
  • Изменено некоторое форматирование, чтобы его было легче читать.
0 голосов
/ 28 марта 2019

Я имею в виду, что нет никаких проблем безопасности или других проблем, которые могут возникнуть из-за этого, если вы помните, чтобы изменить переменную тестового режима. Хотя я бы сделал это с помощью оператора switch вроде

$devmode = "TEST";
$conn = null;
switch($devmode) {
    case "TEST"
        //conn here
       break;
    //case dev
    default:
        //local host con or prod conn
       break;
}

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

...