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

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

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

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

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

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

Прямо сейчас, ВСЕ требует аутентификации. Но я хочу, чтобы все, кроме 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 , появится диалоговое окно входа в 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.

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