Запретить прямой доступ к файлу php - PullRequest
155 голосов
/ 03 января 2009

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

В основном мне нужно выполнить проверку в php-файле следующим образом:

if ( $REQUEST_URL == $URL_OF_CURRENT_PAGE ) die ("Direct access not premitted");

Есть ли простой способ сделать это?

Ответы [ 34 ]

0 голосов
/ 05 февраля 2013

То, что вы также можете сделать, это защитить каталог паролем и хранить там все ваши php-скрипты, разумеется, кроме файла index.php, поскольку во время включения пароль не потребуется, поскольку он потребуется только для http доступ. он также предоставит вам возможность доступа к вашим сценариям, если вы захотите, поскольку у вас будет пароль для доступа к этому каталогу. вам потребуется настроить файл .htaccess для каталога и файл .htpasswd для аутентификации пользователя.

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

Надеюсь, это поможет

0 голосов
/ 18 января 2019

это то, что Google использует в своих примерах php см. Здесь

if (php_sapi_name() != 'cli') {
  throw new \Exception('This application must be run on the command line.');
}
0 голосов
/ 08 марта 2019

Хранение ваших включаемых файлов вне каталога, доступного через Интернет, упоминалось несколько раз и, безусловно, является хорошей стратегией, где это возможно. Тем не менее, еще один вариант, который я еще не видел, был упомянут: убедитесь, что ваши включаемые файлы не содержат исполняемый код . Если ваши включаемые файлы просто определяют функции и классы и не имеют никакого другого кода, они просто создадут пустую страницу при прямом доступе.

Любой способ разрешить прямой доступ к этому файлу из браузера: он ничего не сделает . Он определяет некоторые функции, но ни одна из них не вызывается, поэтому ни одна из них не запускается.

<?php

function a() {
    // function body
}

function b() {
    // function body
}

То же самое относится к файлам, которые содержат только классы PHP и ничего больше.


По-прежнему рекомендуется хранить файлы вне веб-каталога, где это возможно.

  • Вы можете случайно деактивировать PHP, и в этом случае ваш сервер может отправлять содержимое файлов PHP в браузер вместо того, чтобы запускать PHP и отправлять результат. Это может привести к утечке кода (включая пароли базы данных, ключи API и т. Д.).
  • Файлы в веб-каталоге сидят на корточках на URL-адресах, которые вы можете использовать для своего приложения. Я работаю с CMS, у которой не может быть страницы с именем system, потому что это будет конфликтовать с путем, используемым для кода. Я нахожу это раздражающим.
0 голосов
/ 23 апреля 2012

Я предлагаю не использовать $_SERVER по соображениям безопасности.
Вы можете использовать переменную типа $root=true; в первом файле, который включает в себя еще одну.
и используйте isset($root) в начале второго файла, который будет включен.

...