Защита файлов HTML с помощью .htaccess - PullRequest
1 голос
/ 08 марта 2009

Мое PHP-приложение использует 404 документа для генерации HTML-файлов, поэтому несколько запросов к одному и тому же HTML-файлу приводят к генерации только один раз.

Я бы хотел перехватывать запросы к файлам HTML, чтобы у пользователя был установлен установленный PHP-сеанс для получения файлов.

В лучшем случае идентификатор SESSION будет использоваться в URL-адресе, и его можно будет использовать в качестве дополнительной аутентификации. Например, вход в систему выдаст вам SessionID и сделает доступными только определенные HTML-файлы.

Я знаю, что, изменив свои куки, я мог подделать запрос, но это нормально.

Как бы я поступил так?

Ответы [ 4 ]

3 голосов
/ 09 марта 2009

Нечто подобное может работать (я не проверял):

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.

3 голосов
/ 08 марта 2009
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 своего браузера).

1 голос
/ 08 марта 2009

Вы можете использовать модуль Apache mod_rewrite для перенаправления запросов .html URL-адресов в скрипт PHP:

RewriteEngine on
RewriteRule \.html$ script.php [L]

Запрошенный путь и запрос URI будут доступны в переменной $_SERVER['REQUEST_URI'].

0 голосов
/ 08 марта 2009

Поместите кэшированные файлы в корневой каталог, но в таком месте, где PHP может получить к ним доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...