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


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

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

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

7 117

7 ответов:

Я бы просто переместить includes папка из web-root, но если вы хотите заблокировать прямой доступ ко всему 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$

это покажет запрещенную ошибку для / папки / файла.php

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

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

ваш Q состоит из двух частей, решения 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.php form generator включает в себя некоторые скрытые поля для отметки времени и проверки. Проверка может быть, скажем, первой 10 символов MD5 метки времени и какой-то внутренний секрет. При обработке отправки вы можете затем (i) проверить, что метка времени и проверка совпадают, и (ii) метка времени находится в пределах, скажем, 15 минут текущего времени.

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

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

Satisfy all
Order deny,allow
Deny from all

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

Satisfy any

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