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

103

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

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

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

Теги:
.htaccess
mod-rewrite

7 ответов

225
Лучший ответ

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

deny from all

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

  • 6
    Сможет ли другой файл сделать ajax-запрос к файлу, присутствующему в этой папке?
  • 15
    @ChaitanyaChandurkar Нет, ajax-запрос - это обычный http-запрос, поэтому он будет отклонен.
Показать ещё 4 комментария
40

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

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

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

  • 3
    Хорошая работа с отправкой файла
17

Можно использовать директиву Files и запретить доступ ко всем файлам, а затем использовать его еще раз для установки доступных файлов:

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

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>
  • 4
    Я не уверен в том, кто опубликовал вопрос, решена ли его проблема или нет, но в этом прелесть ТАК, что многократный ответ может помочь многим участникам. Этот последний ответ решил мою проблему. Я хочу, чтобы сайты получали файл css, но не имели доступа к шрифтам ttf или otf, и бум! решена.
  • 0
    после этого у меня нет доступа к файлам в подпапках
8

1 решение на основе линейки mod_alias:

RedirectMatch 403 ^/folder/file.php$

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

  • 1
    +1 - на самом деле это очень хорошо, потому что никто даже не может увидеть, какие файлы существуют, если вы примените 404 ко всей папке, используя ^folder regex ^folder .
8

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

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

Если это так, вы не можете использовать anubhava part II, так как это приведет к сбою вашей формы. Здесь вы можете: (i) проверить .htaccess, чтобы ссылка была вашей собственной индексной страницей:

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-минутную жизнь.

8

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

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

5

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

Satisfy all
Order deny,allow
Deny from all

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

Satisfy any

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню