2010-04-19 1 views
0

Я хотел бы убедиться, что любые скрипты, которые пытаются «включить» мой файл подключения к базе данных, находятся в моем собственном домене. Я не хочу, чтобы хакер включал файл подключения к базе данных в свой вредоносный скрипт и таким образом получал доступ к моей базе данных. Имя файла подключения довольно легко догадаться, оно называется «connect.php». Итак, не переименовывая его и не используя защиту через маршрут неизвестности, как я могу его защитить, убедившись, что все запросы на подключение выполняются скриптами, находящимися под моим собственным доменным именем? Как это можно проверить с помощью PHP?Как убедиться, что никакие скрипты, кроме тех, что находятся в моем собственном домене, могут включать файл подключения db?

+0

Просто сделайте скрипт недоступным извне (т. Е. Поместите его в папку, к которой нельзя получить доступ к URL-адресу). –

ответ

-1

Ни один другой пользователь, кроме вас, не должен иметь доступ к вашим файлам PHP каким-либо образом, как упоминал Феликс. Тем не менее, так вы должны проверить на PHP:

if($_SERVER['SERVER_NAME'] != "example.com") 
    die("I've been kidnapped!"); 
+0

Я попробую это. Но что я имел в виду под исходным вопросом, я не хотел, чтобы кто-то включал мой файл, например: include ('http://something.com/connect.php'); используя абсолютный URL-адрес для файла подключения к моему сайту. Конечно, никто не будет иметь прямой доступ к моим php-файлам, но они все равно могут ссылаться на него или включать его правильно? – Jack

+0

Но если кто-то может включить файл, то они могут прочитать файл, чтобы получить учетные данные.:( – symcbean

+0

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

0

Что вы подразумеваете, включая ваш файл подключения? Если сценарий действительно включает «connect.php», то они могут увидеть исходный код файла, поэтому все меры безопасности добавить в этот файл будет бессмысленно, так как это будет так:

if($notFromHostname) 
{ 
echo "DONT LOOK AT THIS"; 
die(); 
} 
define('DB_PASS',"myPassword"); 
... 

И " хакер ", очевидно, сможет увидеть ваш пароль. Вероятно, вам лучше использовать что-то вроде iptables для отказа в хостах, которые не принадлежат определенному домену.

1

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

Это, как правило, хорошая идея сохранить важные файлы недоступными из-за пределов вашего общедоступного веб-пространства. Таким образом, если ваш сайт /var/www/yoursite/ затем сохранить ваш connect.php в /some/dev/dir/yoursite и включают в себя файлы из ваших страниц, используя ответ require_once '/some/dev/dir/yoursite/connect.php';

1

thetaiko адрессы основных проблем здесь - но если кто-то имеет доступ для запуска кода на сервере (т.е. сво общий сервер), то доступ к файлу будет зависеть от того, как настроен сервер.

Существует множество способов доступа к ограничению - например, suphp, base_opendir, несколько chrooted серверов. Единственный способ узнать, что происходит наверняка, - это сыграть роль хакера и посмотреть, можете ли вы получить доступ к файлам за пределами выделенной вами области.

C.

+0

+1 - Я забыл об общем хостинге! – thetaiko

0

Вы на общем сервере и не хотите, чтобы другие пользователи одного и того же экземпляра сервера, чтобы иметь возможность получить доступ к вашим файлам? Тогда вам будет предоставлен какой-то хор или виртуальная система, чтобы поддерживать ваши вещи. Для Apache mod_suid может сделать это красиво, и каждый vhost получает свой собственный набор идентификаторов пользователей и разрешений.

Если вы хотите, чтобы внешние пользователи не смогут получить доступ к вашим файлам, а затем, если вы не сильно потеряются код или сервера плохо неправильно, то все они будут получать, когда они посещают http://yourserver.com/connect.php пустая страница