Блокировка внешнего доступа к каталогу, но разрешение доступа SSI (или Как на самом деле работает директива `FilesMatch`?)

На старом сайте, где я использовал PHP, у меня был .htaccess в каталоге /noaccess следующим образом:

# /noaccess/.htaccess
<FilesMatch "^.*$">
order allow,deny
deny from all
</FilesMatch> 

И у меня был файл PHP, например,

<html>
<body>
<?php include('noaccess/blah.ssi'); ?>
</body>
</html>

Это отлично работает, и содержимое blah.ssi видно.

Однако на моем текущем сайте я использую SSI и следующее:

<html>
<body>
<!--#include virtual="noaccess/blah.ssi" -->
</body>
</html>

не работает. Журналы показывают unable to include "noaccess/blah.ssi". Удалите директиву FilesMatch и все заработает. Так что я явно неправильно понимаю, как работает эта команда, я не понимал, что она заблокирует сам Apache. Итак, как я могу заблокировать доступ из Интернета, но разрешить доступ SSI? (Я думал, что могу (и должен) хранить вещи, которые мне не нужны, за пределами public_html, но это, похоже, не работает ни в SSI include, но в любом случае, даже если бы это было так, мне интересно знать, как сделать это).

Спасибо, Т.


person tjm    schedule 17.12.2010    source источник
comment
почему бы вам не переместить этот файл за пределы корневого каталога вашего сайта...   -  person RageZ    schedule 17.12.2010
comment
Привет, спасибо, но, как я уже упоминал в своем посте, я думал об этом, и если это возможно, я сделаю это, но у меня проблемы с тем, чтобы заставить его работать таким образом.   -  person tjm    schedule 17.12.2010
comment
@RageZ. Чтобы быть ясным в предыдущем проекте PHP, я не мог этого сделать, потому что веб-хост не позволял вам выйти из корневого каталога. Текущий, к счастью, я могу, но SSI включает, кажется, не позволяет мне! Все, что предшествует /, считается корневым уровнем сайта, поэтому /home/... не будет работать, и ../../noaccess, похоже, тоже не работает.   -  person tjm    schedule 17.12.2010


Ответы (2)


Насколько я знаю по опыту, mod_include следует ограничениям клиента, поэтому вы не можете делать то, что хотите, с директивами apache.

Если вы хотите скрыть включенные файлы, вы можете отключить индексы каталогов с помощью директивы Options -Indexes для вашего файла .htaccess. Кроме того, вы можете назвать включенные файлы трудно угадать.

Я бы предпочел использовать uuid, вы можете сгенерировать их с помощью онлайн-инструментов или установить какую-либо утилиту на свою рабочую станцию:

itorres@localhost$ uuid
6e8feb48-1a3b-11e0-a0e3-00505624a126
itorres@localhost$ vi noaccess/6e8feb48-1a3b-11e0-a0e3-00505624a126.ssi
person itorres    schedule 07.01.2011

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

person insaner    schedule 07.11.2014