Запрет прямого URL-доступа к файлам PHP в веб-приложении - PullRequest
0 голосов
/ 29 августа 2018

Все файлы php в приложении напрямую доступны через URL. Добавление этого кода в начале моих файлов php работает для немногих из них, которые запрашиваются методом POST:

if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {

    die(header( 'location:/webapp/postings' ));
}

Но у меня есть некоторые php-файлы, которые запрашиваются методом GET, и приведенный выше код не работает для них, из-за чего я пришел со следующим кодом:

if(!isset($_SERVER['HTTP_REFERER'])){
die(header('location:/webapp/postings'));    
}

Я знаю, что HTTP_REFERER нельзя доверять. Любые другие варианты?

Может кто-нибудь сказать мне общий способ предотвращения прямого доступа к URL без изменения кода для всех файлов php.

Примечание. Мое приложение работает на веб-сервере IIS 7.5.

1 Ответ

0 голосов
/ 11 сентября 2018

Не делай этого:

public_html/
   includes/
       dont_access_me_bro.php
       ...
   index.php
   ...

Сделайте это вместо:

includes/
   dont_access_me_bro.php
   ...
public_html/
   index.php
   ...

Объяснение

Хранение исходных файлов вне корневого каталога документа гарантирует, что пользователи не смогут получить к ним прямой доступ, изменив URI в своем HTTP-запросе. Это не защитит от эксплойтов LFI.

Чтобы узнать, где находится корень вашего документа, вам может помочь этот удобный скрипт PHP:

var_dump($_SERVER['DOCUMENT_ROOT']);

Если выдается string (25) "C:\htdocs\www\example.com", вы не хотите хранить свои файлы в C:\htdocs\www\example.com или любом подкаталоге C:\htdocs\www\example.com.

Если вы помещаете предоставленные пользователем файлы в корневой каталог документа, вы создаете риск того, что кто-то получит к ним доступ непосредственно из своего браузера, а также из-за Apache / nginx / и т. Д. что-то напутает, их загруженный файл может быть выполнен как код.

Таким образом, вы бы не хотели бы, чтобы ваши файлы были внутри C:\htdocs\www\example.com\uploaded, вы бы хотели что-то вроде C:\uploads\example.com\.

В этой статье подробно рассматривается безопасная загрузка файлов в PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...