Я хотел бы убедиться, что любые скрипты, которые пытаются «включить» мой файл подключения к базе данных, находятся в моем собственном домене. Я не хочу, чтобы хакер включал файл подключения к базе данных в свой вредоносный скрипт и таким образом получал доступ к моей базе данных. Имя файла подключения довольно легко догадаться, оно называется «connect.php». Итак, не переименовывая его и не используя защиту через маршрут неизвестности, как я могу его защитить, убедившись, что все запросы на подключение выполняются скриптами, находящимися под моим собственным доменным именем? Как это можно проверить с помощью PHP?Как убедиться, что никакие скрипты, кроме тех, что находятся в моем собственном домене, могут включать файл подключения db?
ответ
Ни один другой пользователь, кроме вас, не должен иметь доступ к вашим файлам PHP каким-либо образом, как упоминал Феликс. Тем не менее, так вы должны проверить на PHP:
if($_SERVER['SERVER_NAME'] != "example.com")
die("I've been kidnapped!");
Я попробую это. Но что я имел в виду под исходным вопросом, я не хотел, чтобы кто-то включал мой файл, например: include ('http://something.com/connect.php'); используя абсолютный URL-адрес для файла подключения к моему сайту. Конечно, никто не будет иметь прямой доступ к моим php-файлам, но они все равно могут ссылаться на него или включать его правильно? – Jack
Но если кто-то может включить файл, то они могут прочитать файл, чтобы получить учетные данные.:( – symcbean
Пользователи могут включать только его с того же сервера, на котором работает ваш сайт, и даже тогда они не должны быть в состоянии. Невозможно включить внешний (размещенный на другом сервере) PHP-файл как PHP. –
Что вы подразумеваете, включая ваш файл подключения? Если сценарий действительно включает «connect.php», то они могут увидеть исходный код файла, поэтому все меры безопасности добавить в этот файл будет бессмысленно, так как это будет так:
if($notFromHostname)
{
echo "DONT LOOK AT THIS";
die();
}
define('DB_PASS',"myPassword");
...
И " хакер ", очевидно, сможет увидеть ваш пароль. Вероятно, вам лучше использовать что-то вроде iptables для отказа в хостах, которые не принадлежат определенному домену.
Вообще говоря, если кто-то пытается включить файл в ваш домен, он увидит результаты выполнения этого файла. Что вы видите, когда загружаете скрипт connect.php в свой веб-браузер? То, что они увидят, если они попытаются включить удаленный файл.
Это, как правило, хорошая идея сохранить важные файлы недоступными из-за пределов вашего общедоступного веб-пространства. Таким образом, если ваш сайт /var/www/yoursite/
затем сохранить ваш connect.php
в /some/dev/dir/yoursite
и включают в себя файлы из ваших страниц, используя ответ require_once '/some/dev/dir/yoursite/connect.php';
thetaiko адрессы основных проблем здесь - но если кто-то имеет доступ для запуска кода на сервере (т.е. сво общий сервер), то доступ к файлу будет зависеть от того, как настроен сервер.
Существует множество способов доступа к ограничению - например, suphp, base_opendir, несколько chrooted серверов. Единственный способ узнать, что происходит наверняка, - это сыграть роль хакера и посмотреть, можете ли вы получить доступ к файлам за пределами выделенной вами области.
C.
+1 - Я забыл об общем хостинге! – thetaiko
Вы на общем сервере и не хотите, чтобы другие пользователи одного и того же экземпляра сервера, чтобы иметь возможность получить доступ к вашим файлам? Тогда вам будет предоставлен какой-то хор или виртуальная система, чтобы поддерживать ваши вещи. Для Apache mod_suid может сделать это красиво, и каждый vhost получает свой собственный набор идентификаторов пользователей и разрешений.
Если вы хотите, чтобы внешние пользователи не смогут получить доступ к вашим файлам, а затем, если вы не сильно потеряются код или сервера плохо неправильно, то все они будут получать, когда они посещают http://yourserver.com/connect.php пустая страница
Просто сделайте скрипт недоступным извне (т. Е. Поместите его в папку, к которой нельзя получить доступ к URL-адресу). –