Защита паролем веб-каталогов и файлов
Пользователь заходит на мой сайт и попадает на домашнюю страницу, он должен быть всегда и только на домашней странице. Все остальные файлы являются сценариями, которые запускаются домашней страницей, но пользователь никогда не должен переходить к ним. Итак, вот мой макет каталога:
Они прибудут на 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 аутентифицировать что-либо в определенном каталоге, но не в отдельных файлах.