2012-02-22 4 views
1

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

С 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, но я не считаю его действительно безопасным.

+0

Вы можете принять один (!) Ответ, нажав V в левой части ответа. Это заставит людей мотивировать вас отвечать на ваши будущие вопросы. Итак, выберите лучший ответ, пожалуйста. –

ответ

4

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

Сохраняете ли вы его в переменных (env) или нет, не будет иметь ничего общего.

Там нет абсолютно ничего плохого в этом коде;)


Edit:

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

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

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

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

Имеется несколько исправлений.

  • Санируйте вход (убедитесь, что входные данные не содержат синтаксис 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 разбирается и удаляется.

+3

Извините, но это ужасный совет. Вы должны * никогда * не хранить свой пароль базы данных в виде обычного текста, особенно не в ваших PHP-файлах. – AviD

+1

@AviD PHP анализируется перед отправкой клиенту, они не видят пароль. Если у кого-то нет прямого доступа к вашим файлам на сервере, угроза отсутствует. Почему, по вашему мнению, ведущая в мире CMS сохраняет пароли базы данных в файлах PHP в виде обычного текста? Если это такая большая проблема, как вы говорите, что вы предлагаете? Даже если вы зашифруете его, вам все равно придется расшифровать его. Когда хакер имеет доступ к вашим файлам сервера, они также могут искать алгоритм дешифрования. Если вы будете использовать любое другое расширение, текст не будет разбираться и будет показан в виде простого текста, что еще хуже. –

+4

Конечно, он не отправляется клиенту. Если есть ошибка. Или какая-то уязвимость. Или инсайдерский доступ к файлам. Или ... Почему ведущие CMS в мире сохраняют файлы в текстовых PHP-файлах? Я понятия не имею. Видимо, они тоже. Остальная часть вашего комментария бессмысленна и отображает полное непонимание шифрования, защиты и безопасности. Я предлагаю вам немного сделать домашнее задание по этим предметам, прежде чем называть себя профессиональным разработчиком. – AviD

1

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

Зачем это нужно?

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

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

+0

Спасибо всем за ваши советы. Я внимательно прочитаю документацию pg_prepare (не знаю об этом) снова подумайте о переменных env для информации о пользователе/​​пропуске. –

Смежные вопросы