Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > вопрос по безопасности


Автор: sandland 1.12.2008, 20:17
Добрый день. Ситуация так. имеется конфигурациооный файл config.php , к примеру с таким кодом: 
Код

$dir="www/lalala";
$user="root";
$pass="12345";
$db="test";
$host="localhost";


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

вопрос 2-ой.
Предположим я добавил в мой файл соединение с бд: 
Код

$dir="www/lalala";
$user="root";
$pass="12345";
$db="test";
$host="localhost";
$link=mysql_connect($host,$user,$pass);
mysql_select_db($db);


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

Автор: Валерия 1.12.2008, 20:26
Безопасно и то и другое.
Ну запустив второй файл, он сделает коннект... И всё...
Конешно, если ддосить именно этот файл, то будет не сладко мускулу)
Можно 
Код

$link=mysql_connect($host,$user,$pass);
mysql_select_db($db);

вынести в функцию
Код

function connect(){
  $link=mysql_connect($host,$user,$pass);
  mysql_select_db($db);
  return $link;
}

И тогда такого не будет smile

Автор: CruorVult 1.12.2008, 21:43
Зайди http://ua.php.net/mysql_real_escape_string, это очень полезная функция против взлома 

Автор: sandland 1.12.2008, 22:58
спасибо. я знаю это ф-цию, естественное ее использую.
Валерия, а права досутпа на php - файлы повлияют? то если я на этот конфиг 777 выставлю?

Автор: Dima 2015 2.12.2008, 15:57
sandland, я бы вот еще чего добавил бы.

Есть общепринятая практика, держать все настройки, конфиги и прочее "ВЫШЕ корня". Т.е. в корневом каталоге сайта (который выдается $_SERVER['DOCUMENT_ROOT'], обычно он выглядит как нечто вроде /home/uXXXX/domain.com/www/ или/home/uXXXX/domain.com/html/) должны быть только исполняемые скрипты, т.е. те, что непосредственно открывает юзер.

Все настройки подключения к БД, классы, кеш-файлы, лог-файлы и прочая прочая, что юзеру непосредственно не надо, должно располагаться выше этого каталога, например для приведенных путей так: 

/home/uXXXX/domain.com/logs/ - путь для хранения логов
/home/uXXXX/domain.com/parameters/ - путь для хранения файлов с параметрами (в т.ч. и константы подключения к БД)
/home/uXXXX/domain.com/classes/ - путь для хранения файлов с классами
/home/uXXXX/domain.com/db/ - путь для хранения файлов работы с БД
/home/uXXXX/domain.com/www/ - путь для исполняемых скриптов

И вот тогда, например есть у тебя исполняемый скрипт index.php в корневом каталоге, ты делаешь внутри него инклуд файла коннекта к БД, который лежит в директории /home/uXXXX/domain.com/db/:

include($_SERVER['DOCUMENT_ROOT'] . '/../db/db_connect.php')

Такая компановка гарантирует, что пользователь сайта не получит доступа к файлу настроек БД db_connect.php из "веб-пространства", тобишь из интернета он его вообще не откроет.

Автор: Валерия 2.12.2008, 18:20
Цитата(sandland @  1.12.2008,  22:58 Найти цитируемый пост)
Валерия, а права досутпа на php - файлы повлияют? то если я на этот конфиг 777 выставлю?

Не повлияют никак) В винде, например, всегда "777" права smile

Автор: sandland 3.12.2008, 00:19
Валерия , понял, спасибо
Dima 2015 , так и сделаю, благодарю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)