Как сделать безопасным соединение с моей базой данных? - PullRequest
12 голосов
/ 27 февраля 2010

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

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, но если бы они могли, я могу только представить быть шлангом Что мне делать?

Ответы [ 3 ]

10 голосов
/ 27 февраля 2010

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

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

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

8 голосов
/ 27 февраля 2010

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

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

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

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

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

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

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

3 голосов
/ 27 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...