Как убедиться, что никакие сценарии, кроме тех, которые находятся в моем собственном домене, не могут включать файл соединения db? - PullRequest
0 голосов
/ 20 апреля 2010

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

Ответы [ 5 ]

1 голос
/ 20 апреля 2010

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

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

С

1 голос
/ 20 апреля 2010

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

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

0 голосов
/ 20 апреля 2010

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

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

0 голосов
/ 20 апреля 2010

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

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

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

0 голосов
/ 20 апреля 2010

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

if($_SERVER['SERVER_NAME'] != "example.com")
    die("I've been kidnapped!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...