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

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

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

Я хочу ограничить прямой доступ пользователей к файлам в includes папка по htaccess. также для submit.php, Но включить будет работать на index.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 лайнер на основе mod_alias:

RedirectMatch 403 ^/folder/file.php$

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

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

.Htaccess с директивой "DENY FROM ALL", помещенной в папку include, поможет.

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

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

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

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

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

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

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

Satisfy all
Order deny,allow
Deny from all

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

Satisfy any

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

Вы можете добавить команду ниже .htaccess файл

Deny from all
ErrorDocument 403 "nothing is here"

В случае несанкционированного доступа будет отображаться сообщение "здесь ничего нет".

Если вы хотите перенаправить с помощью кода ошибки на определенную страницу, вы можете определить команду следующим образом:

ErrorDocument 404 "/errors/404.html"

Он будет перенаправлен на /errors/404.html и показать пользовательскую страницу не найден экран.

Другие вопросы по тегам