запретить прямой доступ к папке и файлу с помощью htaccess

Вот сценарий:

  • В корневой папке есть файл index.php
  • некоторые файлы включены в index.php которые находятся в папке include.
  • 1 другой файл ( 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 

Это мешало моему отказу от всех вступить в силу, потому что пользователи были аутентифицированы.