Запретить прямой доступ к папке и файлу с помощью 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
и показать пользовательскую страницу не найден экран.