запретить прямой доступ к папке и файлу с помощью htaccess - PullRequest
125 голосов
/ 14 февраля 2012

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

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

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

Ответы [ 8 ]

257 голосов
/ 14 февраля 2012

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

deny from all

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

51 голосов
/ 14 февраля 2012

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

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

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

19 голосов
/ 09 сентября 2015

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

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

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>
13 голосов
/ 11 января 2016

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

RedirectMatch 403 ^/folder/file.php$

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

9 голосов
/ 14 февраля 2012

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

.htaccess с директивой 'DENY FROM ALL', помещенной в папку включаемых файлов, поможет.

8 голосов
/ 15 февраля 2012

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

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

Если это так, то вы не можете использовать часть II анубхавы, так как это приведет к провалу формы. Что вы можете сделать здесь: (i) с проверкой .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-минутную жизнь.

6 голосов
/ 18 ноября 2013

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

Satisfy all
Order deny,allow
Deny from all

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

Satisfy any

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

0 голосов
/ 03 июня 2019

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

Deny from all
ErrorDocument 403 "nothing is here"

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

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

ErrorDocument 404 "/errors/404.html"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...