Ограничения на PHP включают () - PullRequest
3 голосов
/ 15 января 2010

Эй, ребята, я отделяю некоторый XHTML от PHP, помещая XHTML в отдельный файл, а затем используя функцию PHP include() в сценарии PHP.

Это прекрасно работает, однако пользователи по-прежнему могут напрямую обращаться к файлу .html, если знают адрес. Они не могут сделать с этим ничего особенного, но я бы предпочел этого не показывать.

Я видел, как в некоторых скриптах в прошлом использовалась какая-то форма проверки реферера. Это то, что я хотел бы сделать, чтобы добавить некоторые базовые ( Обратите внимание, что я сказал "базовые" ) ограничения, чтобы их не было видно путем прямого доступа к нему?

Спасибо!

Разъяснение : я забыл упомянуть, что хочу сделать это в PHP, поэтому нет настройки веб-сервера ( Перемещение файлов из корня документа, настройка веб-сервера для запрета доступа, и т.д. ). Я думаю, что наиболее логичным выбором здесь является использование постоянной проверки define(), это действительно то, что я видел в других скриптах, которые я забыл, как я обрисовал в своем посте. Я понимаю, что это, вероятно, не лучшее решение, но, учитывая, что доступ к html-файлу не имеет особого значения, константы define() должно быть достаточно. Спасибо, я ценю ответы!

Ответы [ 6 ]

3 голосов
/ 15 января 2010

Если вы в настоящее время размещаете все свои файлы (например, index.php) в /something/public_html/, вам нужно переместить файлы в /something/. Таким образом, пользователи не могут получить доступ к файлам.

/public_html/ называется корневым каталогом вашего документа. Эта папка сопоставлена ​​с example.com, и в основном там начинается веб-сайт. Если вы переместите файлы выше, где начинается веб-сайт, никто не сможет получить доступ к этим файлам через браузер.

Как сказал Игнасио, с include это не будет работать, если включен безопасный режим.

Другими способами является размещение чего-либо в верхней части файла с надписью

if(!defined("RUNNING_SCRIPT"))
    die("No Direct Access Allowed");

и затем в ваших PHP-файлах поместите

 define("RUNNING_SCRIPT", true);

Если RUNNING_SCRIPT не определено, это означает, что они напрямую обращаются к нему, и это останавливает загрузку страницы. Это работает только если PHP работает с файлами .html.

Вы также можете использовать файл .htaccess, чтобы запретить доступ к этим папкам.

3 голосов
/ 15 января 2010

Нет, сделайте что-то вроде этого:

index.php:

<?php

define('ALLOW_INCLUDE', true);

include('other.php');

?>

other.php:

<?php

if (defined('ALLOW_INCLUDE') === false) die('no direct access!');

// your code

?>
3 голосов
/ 15 января 2010

Изменить конфигурацию вашего веб-сервера, чтобы запретить доступ к этому файлу?

3 голосов
/ 15 января 2010

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

1 голос
/ 15 января 2010

Хорошей идеей будет поместить это в первую строку.

Вы также можете использовать .htaccess или удалить страницу index.html в качестве запасного варианта.

<?php defined('SOME_CONSTANT_GLOBAL_TO_YOUR_APP') or die('Access denied.'); ?>
0 голосов
/ 15 января 2010

может быть контроль доступа apache? http://httpd.apache.org/docs/2.2/howto/access.html

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