Вот сценарий:
index.php
index.php
которые находятся в папке include. submit.php
) находится в корневой папке для действия отправки формы. Я хочу ограничить прямой доступ пользователей к файлам в папке include с помощью htaccess. также для submit.php
. Но include будет работать для файла index.php
. Например, если пользователь набирает www.domain.com/includes/somepage.php
, он будет ограничивать его (может быть перенаправлен на страницу с ошибкой).
Я бы просто переместил папку include из веб-корня, но если вы хотите заблокировать прямой доступ к целой папке, вы можете поместить файл .htaccess
в эту папку, которая содержит:
deny from all
Таким образом, вы не можете открыть какой-либо файл из этой папки, но вы можете включить их в php без каких-либо проблем.
Это чистое решение на основе mod_rewrite
:
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
Это покажет запрещенную ошибку, если URI содержит либо /includes/
или /submit.php
Можно использовать директиву «Файлы» и запретить доступ ко всем файлам, а затем использовать ее снова, чтобы установить доступные файлы:
<Files ~ "^.*"> Deny from all </Files> <Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif"> Allow from all </Files>
Если я правильно понимаю, вы просто хотите запретить доступ к папке include?
Хит-доступ с директивой «DENY FROM ALL», помещенной в папку include, сделает трюк.
Ваш Q состоит из двух частей: решения для jeroen и anubhava работают для части I – отказ в доступе к / включает. Анубхава также работает для части II. Я предпочитаю последнее, потому что в DOCROOT/.htaccess
случае я использую DOCROOT/.htaccess
и это сохраняет все такое управление в одном файле.
Однако то, что я хотел обсудить, – это понятие «отказ в доступе к submit.php
». Если вы не хотите использовать submit.php
то зачем вообще это делать в DOCROOT? Я подозреваю, что ответ здесь заключается в том, что вы используете его как цель действия в некоторых формах и только хотите, чтобы он был запущен, когда форма была отправлена, а не напрямую, например, из спамбота.
Если это так, вы не можете использовать часть II anubhava, так как это приведет к сбою вашей формы. Что вы можете сделать здесь: (i) с проверкой .htaccess
чтобы убедиться, что referrer – ваша собственная индексная страница:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC] RewriteRule ^submit\.php$ - [F]
И (ii) в вашем генераторе формы PHP index.php есть некоторые скрытые поля для отметки времени и проверки. Валидацией могут быть, скажем, первые 10 символов MD5 временной метки и некоторый внутренний секрет. При обработке submit вы можете (i) проверить соответствие метки времени и валидации, и (ii) отметка времени находится, например, в течение 15 минут текущего времени.
Это позволяет предотвратить спам как единственный практический способ, с помощью которого спамер может получить действительную пару временной отметки / проверки, – это проанализировать форму, но эта царапина будет иметь только 15-минутную жизнь.
1 решение на основе линейки mod_alias:
RedirectMatch 403 ^/folder/file.php$
Это покажет запрещенную ошибку для /folder/file.php
В зависимости от возможных других параметров, установленных на более высоком уровне, вам может потребоваться поместить следующее в ваш файл .htaccess в ваш каталог include:
Satisfy all Order deny,allow Deny from all
Я столкнулся с этим, когда верхний каталог определил базовую аутентификацию, включая строку:
Satisfy any
Это мешало моему отказу от всех вступить в силу, потому что пользователи были аутентифицированы.