Какие проверки следует использовать для предотвращения прямого доступа к страницам (с использованием PHP)?

Лучше ли проверять определенную константу, проверить URL-адрес или любые другие способы …

что-то вроде

if(!defined(INCLUDED)) 

из

 if($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF']) 

Каким образом вы проверяете, был ли доступ к файлу напрямую … Кроме того, важно ли предотвращать прямой доступ к страницам … (я полагаю, что сайт должен работать так, как он был разработан, поэтому прямой доступ к нему будет идти против этого, но ) Что ты думаешь

Определение константы, вероятно, лучший способ сделать это, не вникая в тонны кода … Просто определите константу перед вашей линией включения и проверьте, не определено ли это во включенном файле …

основной файл

 <?php define("IS_INCLUDED",true); include "included_file.php"; ?> 

included_file.php

 <?php if(!defined("IS_INCLUDED")){ header("Location: error_page.php"); } ?> 

Таким образом, если они обращаются к странице, константа не будет определена, и они будут перенаправлены туда, где вы хотите.

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

Существует три подхода к этой проблеме, которые я обычно вижу / использую:

  1. Если файл не предназначен для загрузки напрямую через URL-адрес, поместите его во включенную директорию (определенную в php.ini), а не под корень документа;
  2. Если вы не можете сделать (1) создать один или несколько каталогов, таких как «include» под вашим корнем документа и ограничить доступ к ним с помощью mod_rewrite; или
  3. Я склонен обнаруживать, что любой содержащий мой файл состоит из ничего, кроме функций, так что не имеет значения, обращается ли кто-либо к нему напрямую или нет.

В качестве примера (2):

 RewriteEngine On RewriteRule ^include/ [R=404,L] 

Это отправляет файл не найденной ошибке при попытках попасть в каталог include.