Защита паролем веб-каталогов и файлов

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

Они прибудут на Front.php и должны всегда оставаться на фронте. Поэтому я создал файл htaccess, который имеет этот код:

DirectoryIndex Front.php index.html
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd
Require valid-user

Прямо сейчас ВСЕ требует аутентификации. Но я хочу, чтобы все, кроме Front.php, требовало аутентификации. Как я могу исключить Front.php из аутентификации?

Кроме того, будет ли эта проверка подлинности препятствовать выполнению сценариев или она просто помешает пользователю перейти к файлу через URL?

4 ответа

Прямо сейчас ВСЕ требует аутентификации. Но я хочу, чтобы все, кроме Front.php, требовало аутентификации. Как я могу исключить Front.php из аутентификации?

Пытаться:

SetEnvIfNoCase Request_URI ^/Front.php norequire_auth=true

# Auth stuff
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd

# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is set
Allow from env=norequire_auth

Это использует Satisfy директива и устанавливает его any, то есть либо Require valid-user или Allow достаточно хорош Переменная norequire_auth устанавливается только когда URI /Front.php, Вы можете добавить дополнительные URI из белого списка, если хотите, добавив дополнительные SetEnvIfNoCase директивы.

Кроме того, будет ли эта проверка подлинности препятствовать выполнению сценариев или она просто помешает пользователю перейти к файлу через URL?

Это не помешает запуску скриптов, если вы включите их через include или же require, Но если вы прямо ссылаетесь на них из Front.php HTML-контента, появится диалог входа в систему для Front.php.

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

Если вы не хотите выполнять эти сценарии напрямую, лучше переместить их из папки public_html, чтобы они вообще не могли быть доступны извне. Вы по-прежнему сможете включать / требовать их в front.php.

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

В начале файла вы часто видите такую ​​проверку:

defined('MYAPPDEFINE') || die('No direct access allowed');

На странице ввода (index.php, front.php и т. Д.) Вы можете добавить эту строку:

define('MYAPPDEFINE', 'Whatever value');

Таким образом, каждый файл, который вызывается напрямую, умирает и немедленно завершается, но когда он включается из front.php, проверка завершается успешно и файл включается.

Используйте этот набор правил:

<Filesmatch "^((?!Front\.php).)*$">
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd
Require valid-user
</Filesmatch>

<Files "Front.php">
allow from all
</Files>

Используйте этот контент.htaccess, чтобы запретить людям запрашивать что-либо, кроме front.php:

RewriteEngine On

RewriteCond %{THE_REQUEST} !front.php [NC]
RewriteRule .* - [F,L]

Теперь только fron.php будет доступен любому, кто обращается к вашему apache.

Кстати, насколько я знаю, вы можете заставить Apache аутентифицировать что-либо в определенном каталоге, но не в отдельных файлах.

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