Когда Вы пишите простенькую гостевую книгу, или счетчик, прибавляющий 1, к
предыдущему значению, Вы, как правило, используете один-два файла не связанные
друг с другом. Но однажды возникает необходимость разделять программу на
несколько частей, причем одна часть вызывается другой. Пример:
Делается форум-сервер, вроде www.xpoint.ru. Если Вы заметили, там скрипту
forum.cgi присваивается очень много действий: от просмотра сообщений, до
отправки личных сообщений. В таких ситуациях используются различные скрипты,
каждый из которых отвечает за свое действие. А главный скрипт, в зависимости от
действия вызывает тот или иной модуль при помощи конструкции include (или
recure).
Но такие файлы не должны вызываться самостоятельно, а только из главного
скрипта. Вот здесь мы и покажем три основных способа защиты их от запуска.
Каталог выше корня сайта
Самый простой способ - просто положить
скрипты выше каталога www. Т.е. допустим, у Вас выделено место в каталоге
/home/youhost.host/htdocs/. Каталог htdocs здесь является корнем сайта (не
путать с корнем сервера). Тогда положите ваши скрипты в каталог
/home/yourhost.host/ . И все! Из браузера Ваши скрипты будет не возможно
увидеть.
Использование константы
Опять же несложный способ - использование
функции define(). Просто напишите в главном файле (который вызывает модули)
такую строчку (например):
define("index", "yes");
А в первой строке (по крайней мере до того как
начнется чего-то важное) напишите следующую строку:
if(!defined("index")) die("Вы не имеете права на работу с этим
файлом");
Все! Теперь при любой попытке запустить такой файл напрямую будет
выводиться надпись "Вы не имеете права на работу с этим файлом", а сам скрипт
выполняться не будет.
Как это работает? Функция define создает константу index. Далее выражение
if при помощи другой функции defined проверяет наличие предопределенной
константы, и в случае если константа неопределенна, выводит сообщение об ошибке
и прерывает выполнение скрипта.
Использование .htaccess
Здесь есть очень много различных способов
защиты всех внешних запусков. Суть у них одна. Создайте в папке с такими
файлами-модулями файл .htaccess и пропишите:
<files ~ "*.*">
order allow,deny
deny from
all
</files>
Все. Ни кто с наружи эти файлы запустить не сможет.
Можете написать примерно такую строчку:
<files ~ "^\_">
order allow,deny
deny from
all
</files>
И называть все файлы-модули начиная с _ (_emter.php; _admin.php и т.п.).
Вообще с .htaccess можно сделать очень многое, и здесь я рекомендую
обратиться к литературе по apache.