Защита файлов HTML с помощью .htaccess
Вопрос
Моё приложение PHP использует 404 Документа для генерации HTML-файлов, поэтому несколько запросов к одному и тому же HTML-файлу вызывают генерацию только один раз.
Я бы хотел перехватывать запросы к файлам HTML, чтобы у пользователя был установлен установленный PHP-сеанс, чтобы получить файлы.
В лучшем случае идентификатор SESSION будет использоваться в URL-адресе, и его можно будет использовать в качестве дополнительной аутентификации. Например, вход в систему выдаст вам SessionID и сделает доступными только определенные HTML-файлы.
Я знаю, что, меняя свои куки, я могу подделать запрос, но это нормально.
Как бы я поступил так?
Решение
Нечто подобное может работать (я не проверял):
RewriteCond %{HTTP_COOKIE} PHPSESSID=([a-zA-Z0-9]+)
RewriteCond %{REQUEST_FILENAME} %{REQUEST_FILENAME}-%1.html
RewriteRule ^ %{REQUEST_FILENAME}-%1.html
Предполагается, что вы добавляете " - $ session_id.html "
к именам файлов ( $ session_id
- это идентификатор сеанса PHP).
Это должно быть безопасно, и выгода в том, что файлы обслуживаются веб-сервером напрямую, вообще не вызывая PHP. Р>
Другие советы
SetEnvIf HTTP_COOKIE "PHPSESSID" let_me_in
<Directory /www/static/htmls>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
Конечно, пользователь может вручную создать такой файл cookie в своем браузере (существуют расширения, которые делают это для Firefox, и вы всегда можете отредактировать хранилище файлов cookie своего браузера).
Вы можете использовать модуль Apache mod_rewrite для перенаправления запросов .html
URL-адреса скрипта PHP:
RewriteEngine on
RewriteRule \.html$ script.php [L]
Запрошенный путь и запрос URI будут доступны в переменной $ _ SERVER ['REQUEST_URI']
.
Поместите кэшированные файлы в корневой каталог, но в таком месте, где PHP может получить к ним доступ.