Допустим, у вас много файлов html, css, js, img и etc в каталоге на вашем сервере. Обычно любой пользователь интернет-земли может получить доступ к этим файлам, просто набрав полный URL-адрес, например: http://example.com/static-files/sub/index.html
Теперь, если вы хотите, чтобы только авторизованные пользователи могли загружать эти файлы? В этом примере, скажем, ваши пользователи сначала регистрируются в URL-адресе: http://example.com/login.php
Как бы вы разрешили зарегистрированному пользователю просматривать файл index.html(или любой из файлов под "статическими файлами" ), но ограничивать файл для всех остальных?
На сегодняшний день у меня появилось два возможных решения:
Решение 1
Создайте следующий файл .htaccess в разделе "static-files":
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ ../authorize.php?file=$1 [NC]
И затем в authorize.php...
if (isLoggedInUser()) readfile('static-files/'.$_REQUEST['file']);
else echo 'denied';
Этот файл authorize.php сильно упрощен, но вы получаете идею.
Решение 2
Создайте следующий файл .htaccess в разделе "static-files":
Order Deny,Allow
Deny from all
Allow from 000.000.000.000
И тогда моя страница входа в систему могла бы добавить этот файл .htaccess с IP для каждого пользователя, входящего в систему. Очевидно, для этого также потребуется какая-то процедура очистки, чтобы очистить старые или более не используемые IP-адреса.
Я беспокоюсь, что мое первое решение может стать довольно дорогостоящим на сервере, так как увеличивается количество пользователей и файлов, к которым они обращаются. Я думаю, что мое второе решение будет намного дешевле, но также менее безопасно из-за IP-спуфинга и т.д. Я также опасаюсь, что запись этих IP-адресов в файл htaccess может стать узким местом приложения, если есть много одновременных пользователей.
Какое из этих решений звучит лучше и почему? Или вы можете подумать о совершенно другом решении, которое было бы лучше, чем любое из этих?