Как я могу защитить мои включенные файлы php от прямого доступа? - PullRequest
2 голосов
/ 24 апреля 2011

Мой скрипт ...

index.php

DEFINE('DIR', 'http://www.example.com');
DEFINE('IN_PAGE', TRUE);

INCLUDE DIR . ('/incl/header.php');
INCLUDE DIR . ('/incl/content.php');
INCLUDE DIR . ('/incl/footer.php');

/ incl / header.php

if (!defined('IN_PAGE'))
{
    header("Status: 403 Forbidden");
    exit('<B>403 Forbidden</B>');
}

Visiting index.php

Предупреждение: include (http://www.example.com/incl/header.php) [function.include]: не удалось открыть поток: сбой HTTP-запроса! HTTP / 1.1 403 Запрещено в /public_html/incl/index-incl.php в строке 4

Предупреждение: include () [function.include]: не удалось открыть 'http://www.example.com/incl/header.php' для включения (include_path ='.: / Usr / lib64 / php: / usr / lib / php ') в / public_html / incl / index-incl.php в строке 4


Это работает своего рода, если я пытаюсь получить прямой доступ к файлу, я получаю сообщение «Запрещено», как я хотел ... Но я не могу включить его в свой скрипт.... хотя я почти уверен, что правильно следовал вики-разработке phpBB.

Я чертовски новичок, поэтому ваша помощь очень ценится! =]

Ответы [ 5 ]

1 голос
/ 24 апреля 2011

Идеальный способ - разместить подключаемые файлы вне webroot.

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

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

В качестве подсказки: при включении файлов всегда включайте с абсолютным путем:

include(dirname(__FILE__) . "/includes/template.inc");
// __FILE__ is the diskpath of the current file

, а не:

include("includes/template.inc");

Это избавит вас от многих головных болей.

И, как говорили другие парни, никогда не включайте файлы с другого веб-сервера (http://), это означает, что вы делаете что-то в корне неверное: P

1 голос
/ 24 апреля 2011

Перейти на использование htaccess

0 голосов
/ 24 апреля 2011

Ваша проблема в том, include использует локальный путь к файлам, а не URL.Вам нужно знать, каков корневой путь ваших файлов в вашей учетной записи, например /home/your_account/public_html/

0 голосов
/ 24 апреля 2011

вы пытаетесь включить удаленный файл DEFINE('DIR', 'http://www.example.com');, поэтому ваш сервер фактически вызывает URL, получает ошибку и показывает, что использует относительный путь, например.DEFINE('DIR', '/'); вместо

0 голосов
/ 24 апреля 2011

Вы пытаетесь включить как INCLUDE ('http://www.example.com/incl/header.php'); в основном

Измените dir на DEFINE (' DIR ', dirname (__ FILE __));

или что-то подобное, чтобы это неиспользование домена в пути включения, что означает, что включение выполняется локально.

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