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

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

  • есть index.php файл в корневой папке
  • некоторые файлы включены в index.php, которые в .
  • 1 другой файл (submit.php) находится в корневой папке для отправки формы действий.

Я хочу ограничить прямой доступ пользователей к файлам в includes папка htaccess. также для submit.php. Но включить будет работать . Например, если пользователь вводит www.domain.com/includes/somepage.php, это ограничит его (может быть перенаправлен на страницу с ошибкой).

7 ответов


Я бы просто переместить includes папка из веб-корня, но если вы хотите заблокировать прямой доступ ко всему includes папка, вы можете поставить .htaccess файл в этой папке, которая содержит только:

deny from all

таким образом, вы не можете открыть файл из этой папки, но вы можете включить их в php без каких-либо проблем.


Это чисто mod_rewrite решение:

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

это покажет запрещенную ошибку для использования, если URI содержит либо /includes/ или /submit.php


можно использовать директиву Files и запретить доступ ко всем файлам, а затем использовать ее снова, чтобы установить доступные файлы:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

1 liner mod_alias решение на основе:

RedirectMatch 403 ^/folder/file.php$

Это покажет запрещенную ошибку для / folder / file.в PHP


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

An .htaccess с директивой "DENY FROM ALL", помещенной в папку includes, сделает трюк.


ваш Q состоит из двух частей, оба решения jeroen и anubhava работают для части I-отказ в доступе к /включает. Анубхава также работает для части II. Я предпочитаю последнее, потому что я использую DOCROOT/.htaccess в любом случае, и это сохраняет весь такой контроль в одном файле.

однако то, что я хотел обсудить, - это концепция " отказа в доступе к submit.php". Если вы не хотите использовать submit.php тогда почему он вообще в DOCROOT? Я подозреваю, что ответ здесь заключается в том, что вы используете его в качестве цели действия в некоторые формы и только хотят , чтобы он был уволен, когда форма представлена, а не напрямую, например, из spambot.

если это правда, то вы не можете использовать часть II анубхавы, так как это приведет к сбою вашей формы. Что вы можете сделать здесь (я) с .htaccess проверьте, чтобы реферер был вашей собственной индексной страницей:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

и (ii) в вашем индексе PHP.PHP form generator включает некоторые скрытые поля для метки времени и проверки. Проверка может быть, скажем, первой 10 символов MD5 метки времени и некоторого внутреннего секрета. При обработке отправки вы можете (i) проверить, что метка времени и проверка совпадают, и (ii) метка времени находится в пределах, скажем, 15 минут текущего времени.

Это вы можете предотвратить спам как единственный практический способ, которым спамер может получить действительную пару отметок времени / проверки, - это проанализировать форму, но эта царапина будет иметь только 15-минутную жизнь.


в зависимости от возможных других параметров, установленных на более высоком уровне, вам может потребоваться поместить следующее.файл htaccess в папке includes:

Satisfy all
Order deny,allow
Deny from all

я столкнулся с этим, когда верхний каталог определил базовую аутентификацию, включая строку:

Satisfy any

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