Защитить соединение с базой данных PostgreSQL - PullRequest
1 голос
/ 22 февраля 2012

В настоящее время я работаю над проектом php / PostgreSQL / JQuery, и я абсолютный новичок во всех этих областях. В Php, чтобы подключиться к моей базе данных, лучший способ, который я нашел, это включить php скрипт с пользователем и паролем во всех скриптах php, которые в нем нуждаются, вот так. include('../scripts/pgconnect.php');

С pgconnect.php:

$conn_string = "dbname=mydb user=myuser password=mypass";

$db = pg_connect($conn_string);

if(!$db){ die("Connection à la base impossible -> " . pg_errormessage($db));}

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

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

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

Независимо от того, храните ли вы его в переменных (env) или нет, разница не будет.

В этом коде нет ничего плохого;)


Edit:

Однако, когда вы выполняете SQL-запрос, вы должны быть осторожны. Часто вы используете пользовательский ввод (URL или данные POST) для установки определенных значений в запросе. Например:

$sql = 'SELECT * FROM `table` WHERE `id`=' . $_GET['id'];

В URL установлена ​​переменная $_GET['id'] (index.php?id=4).

Если они изменят значение 4 на небольшой запрос SQL, они могут практически все сделать с вашей базой данных. Это называется SQL-инъекция . Это действительно самая большая угроза для веб-приложений, использующих базу данных.

Есть несколько исправлений.

  • Очистить входные данные (убедитесь, что входные данные не содержат синтаксис SQL)
  • Подготовка выписок

Теперь я не знаком с PostgreSQL, но, очевидно, модуль PHP имеет возможность отправлять подготовленные операторы. Это позволяет отправлять запрос с неизвестными значениями в виде вопросительных знаков и затем отправлять значения.

$sql = 'SELECT * FROM `table` WHERE `id`=?';
// send prepared statement

$value = $_GET['id'];
// send the value

Таким образом, база данных может сказать, что значение не является запросом.

Как я уже сказал, я не знаком с PostgreSQL, но я уверен, что есть несколько руководств, которые помогут вам на всем пути!


Другое редактирование:

Поскольку я хороший парень, я нашел, как это сделать! Вам необходимо использовать функции pg_prepare () и pg_execute () . Как это:

// This is a name to allow the database to identify the prepared statement
$queryname = 'my_query';

// Setting up our query with "empty" values
$sql = "SELECT * FROM `table` WHERE `column`='$1' AND `column`='$2'";

// Setting our values to send afterwards
$values = array(
    $_GET['first_value'], // The first value that will replace $1
    $_GET['second_value'] // The second value that will replace $2
);

$result = pg_prepare($connection, $queryname, $sql); // Send the query to the database
$result = pg_execute($connection, $queryname, array($value)); // Send the values

Последнее редактирование (клянусь):

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

1 голос
/ 22 февраля 2012

Я использую переменную среды для хранения информации аутентификации БД: то есть хост / пользователь / пароль для БД находятся в командах SetEnv в конфигурации Apache, которые отображаются в $_SERVER.

Зачем это делать?

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

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

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