Как я делаю свое соединение с базой данных безопасным?

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

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

12
задан JoeCortopassi 27 February 2010 в 00:48
поделиться

3 ответа

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

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

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

10
ответ дан 2 December 2019 в 07:02
поделиться

Грубое принуждение будет проходить через каждую перестановку , которая является O (N!), и для каждой перестановки просто закольцовывать каждое правило, чтобы подтвердить, что они являются O (M). Это заканчивает O (N! M), что немного смешно, но это не должно «не работать» для такого маленького набора.

-121--2980849-

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

Он считается опасным, поскольку не выполняет проверку ни во время компиляции, ни во время выполнения. Если вы совершите ошибку, она может и будет крушить и жутко гореть, и ее трудно отладить. Вы, по сути, говорите компилятору «Я знаю лучше вас, что это на самом деле, так что просто составьте код и позвольте мне беспокоиться о последствиях».

-121--2814099-

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

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

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

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

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

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

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

9
ответ дан 2 December 2019 в 07:02
поделиться

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

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

3
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: