папка для сохранения файлов, которые извлекаются с помощью require в дереве документов - PullRequest
1 голос
/ 19 октября 2011

Я создаю веб-сайт на основе php, и я хочу спросить, куда поместить файлы, которые извлекаются с помощью оператора require, чтобы к ним не могли получить доступ пользователи с помощью своего браузера. (например, файл php, который подключается к моей базе данных)

РЕДАКТИРОВАТЬ на самом деле я думаю, что лучший способ - это поместить их за пределы общедоступного корня, потому что в руководстве по apache говорится, что htaccess будет иметь эффект замедления. это можно сделать, добавив ../ например require ("../ myFile.php"); (По крайней мере, это работает на моем сервере) С наилучшими пожеланиями ко всем

Ответы [ 6 ]

1 голос
/ 19 октября 2011

Это зависит от конфигурации веб-сервера.Обычно (или, по крайней мере, во всех случаях, свидетелями которых я был), у вас есть корень документа, к которому пользователи не могут получить доступ с помощью своего браузера, и там находится папка, содержащая все общедоступные материалы (часто называемые htdocs , httpdocs , public_html или что-либо в этом роде. Зачастую вы можете поместить ваши включаемые файлы PHP в этот корень, а затем потребовать их, используя require("../include_file.php"); Однако это зависит от конфигурации, может ли PHP включать файлы вне вашей общей папки.Если нет, то файл .htaccess - ваш лучший вариант.

0 голосов
/ 19 октября 2011

Вам необходимо поместить эти файлы вне общедоступных папок на вашем веб-сервере.Большинство (всех?) Веб-хостов должны иметь возможность изменять корень документа на сайте.

Например, предположим, что все ваши файлы обслуживаются из следующей директории на вашем хосте: /home/username/www/example.com/

Это означает, что все, что находится в этом каталоге, является видимым для Интернета.Если вы перейдете на http://example.com/myfile.png, он будет обслуживать файл на /home/username/www/example.com/myfile.png.

. То, что вы хотите сделать, - это создать новый каталог, например, public, который будет обслуживать ваши файлы, и указатькорень документа там.После того, как вы это сделаете, запрос на http://example.com/myfile.png будет отправлен из /home/username/www/example.com/public/myfile.png (обратите внимание на каталог public здесь).Теперь все, что находится в каталоге example.com, не будет отображаться на вашем сайте.Вы можете создать новый каталог с именем, например, private, где будут храниться ваши конфиденциальные включаемые файлы.

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

/home/username/www/example.com/public/index.php
/home/username/www/example.com/private/sensitive.php

Файл index.php виден в Интернете, но sensitive.php - нет.Чтобы включить sensitive.php, вы просто указываете полный путь к файлу:

require_once("/home/username/www/example/com/private/sensitive.php");

Вы также можете установить корень своего приложения (корень файлов ваших сайтов, но не корень общедоступных файлов) в качествеdefine, возможно, где-нибудь в конфигурационном файле, и используйте его, например:

require_once(APP_ROOT . "sensitive.php");

Если вы не можете изменить корень документа, то некоторые платформы делают использование define, чтобы отметить, чтофайл не должен быть выполнен напрямую.Вы создаете определение в любом файле, который хотите использовать в качестве точки входа в ваше приложение, обычно просто index.php, например:

if (!defined('SENSITIVE')) {
   define('SENSITIVE', 'SENSITIVE');
}

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

if (!defined('SENSITIVE')) {
   die("This file cannot be accessed directly.");
}

Кроме того, убедитесь, что ваши включаемые файлы доступны для общего доступа (и действительно, даже еслинет), имеют правильное расширение, такое как .php, чтобы веб-сервер знал, что нужно выполнять их как файлы PHP, а не как обычный текст.Некоторые люди используют .inc для обозначения включаемых файлов, но если сервер не распознает их как обрабатываемые PHP, ваш код будет доступен всем, кто хочет посмотреть.Это не хорошо!Чтобы предотвратить это, всегда называйте ваши файлы с расширением .php.Если вы хотите использовать стиль .inc для отображения включаемых файлов, рассмотрите вариант использования .inc.php.

0 голосов
/ 19 октября 2011

Обычно вы помещаете их в каталог, который недоступен через веб-сервер (вне документа или корневого каталога). Иногда называется «личным» каталогом.

Затем вы включаете / запрашиваете файл по этому пути, поскольку PHP все еще имеет доступ к файлам.

Смотри также:

0 голосов
/ 19 октября 2011

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

0 голосов
/ 19 октября 2011

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

Если вы используете apache, вы также можете поместить эти файлы в каталог, к которому у вас нет доступа с помощью файла .htaccess.

И последнее замечание: если ваши файлы не генерируют вывод, пользователи не смогут проверить содержимое файлов.

0 голосов
/ 19 октября 2011

Просто сделайте их безопасными с помощью .htacces!

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

<Files xy>
change this bit here
</Files>

до

  Order allow,deny
  Deny from all

Тогда вам больше не понадобится файл htpassword!

...