Как запретить доступ на просмотр файла php?

254
18 июля 2017, 20:35

Надо запретить доступ на просмотр нескольких файлов (их может быть тысячи). Например: header.php, footer.php, (они находятся в /include/тут.

Как это сделать?

Так, чтобы пользователь видел ошибку 404 например, но другой скрипт видел этот файл (например index.php, include_once 'include/header.php';).

Я думал брать условием, если текущий адрес например: localhost/include/header.php, то выводить 404. Как это правильней сделать?

Answer 1

Правильно было бы вынести этот каталог за пределы корня сайта. Это самое надежное решение.

Чуть менее правильно было бы сделать это на стороне сервера. Например, в nginx это делается так:

location /include/ {
    internal;
}

Если так, как выше, сделать нельзя, то можно в файле с настройками или прямо в index.php определить функцию, которая ничего не делает. Затем в начале каждого файла в каталоге include вызывать эту функцию. Так как функция будет неизвестна если файл вызывается напрямую, то будет ошибка и выполнение остановится.

Пример функции из файла с настройками:

function internal() {}

Пример использования:

<?php
internal();
// дальше обычный код
// который не выполнится если функция выше не определена
// а определена она будет только если этот файл включается откуда-то
Answer 2

Если я правильно понял, нужно запретить прямой переход по ссылке, так?

Я это делал так:

Поскольку сайт был по модели mvc и всё грузилось из index.php, то в этом index.php я дефайнил переменную, например так - define("VALID_CALL", true), и если на странице эта переменная не isset (а установлена она может быть только в index.php), значит вызов был не из индекса - запрещаем дальнейшую загрузку страницы или выводим своё сообщение с ошибкой.

READ ALSO
Хочу научиться работать с woocommerce wp [требует правки]

Хочу научиться работать с woocommerce wp [требует правки]

Хочу научиться работать с woocommerce wp, чтобы верстку с нуля интегрировать, подскажите пожалуйста хорошие видеоуроки или сайты с хорошим пояснением

167
php + mysql построение графика

php + mysql построение графика

есть две даты, и запрос на php

192
exited on signal 11 xhprof

exited on signal 11 xhprof

php5, я поставил расширение XHprof, сервер работает под Ubuntu 1404, но когда я пытаюсь его поюзать, получаю 502 Bad Gateway

163
Добавление элементов в массив с помощью .serializeArray()

Добавление элементов в массив с помощью .serializeArray()

ЗдравствуйтеИмеется форма с полями:

209