Подтвердить что ты не робот

Как сделать подключение к базе данных безопасным?

В настоящее время я работаю над сайтом для моей церковной коллегии, и я начал немного беспокоиться о безопасности того, что я пишу. Например, я использую эту функцию:

function dbConnect() 
  {
  global $dbcon;

  $dbInfo['server'] = "localhost";
  $dbInfo['database'] = "users";
  $dbInfo['username'] = "root";
  $dbInfo['password'] = "password";

  $con = "mysql:host=" . $dbInfo['server'] . "; dbname=" . $dbInfo['database'];
  $dbcon = new PDO($con, $dbInfo['username'], $dbInfo['password']);
  $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $error = $dbcon->errorInfo();

  if($error[0] != "") 
    {
    print "<p>DATABASE CONNECTION ERROR:</p>";
    print_r($error);
    }
  }

для подключения к базе данных всякий раз, когда я выполняю какой-либо запрос. Я всегда использую подготовленные заявления PDO для предотвращения внедрения SQL из любого пользовательского ввода, и я использую htmlspecialchars для выхода до вывода. Мой вопрос таков: Как защитить свое имя пользователя и пароль для моей базы данных? Я не знаю, может ли кто-нибудь просмотреть исходный код для моих файлов PHP, но если бы они могли, я могу только представить себе, что я будет закрыт. Что мне делать?

4b9b3361

Ответ 1

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

Посмотрите эту статью по теме эта статья по теме:

Решение прост. Поместите все конфиденциальные данные за пределы корневого каталога ваших веб-серверов. Многие эксперты теперь выступают за размещение большинства, если не всех, вашего php-кода за пределами корневого документа вашего веб-сервера. Поскольку PHP не ограничен теми же ограничениями, вы являетесь веб-сервером, вы можете сделать каталог на том же уровне, что и ваш корневой каталог, и разместить там все свои конфиденциальные данные и код.

Ответ 2

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

Вы должны рассмотреть потенциальные источники проблем.

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

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

  • Если кому-то удается написать PHP script в корневом каталоге документа, он в основном такой же, как у кого-то, имеющего доступ к оболочке, поэтому никакая мера не защитит вас.

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

Основная проблема безопасности с базами данных - обеспечить, чтобы кто-то из Интернета не мог напрямую подключиться. Это можно сделать с помощью брандмауэра, привязывая базу данных к частному IP-адресу или помещая базу данных на частный сервер.

Ответ 3

Есть меры предосторожности, которые вы можете предпринять. Создайте пользователя mySQL, который зависит от того, что ваше приложение должно делать. Это может ограничить количество ущерба, наносимого злоумышленнику, если он скомпрометировал ваше имя пользователя и пароль. Например, разрешите пользователю вставлять, обновлять, выбирать и т.д., Но НЕ отбрасывать и т.д. Кроме того, как упоминалось выше, база данных не должна быть доступна снаружи. В среде общего хостинга это обычно означает, что db может быть подключен только с вашего www-сервера или локального хоста.

Re: kalpaitch, не пропускайте свой пароль в каком-то обратимом хэше. Люди никогда не должны видеть ваш источник.