.htaccessによるHTMLファイルの保護
質問
私のPHPアプリは404ドキュメントを使用してHTMLファイルを生成するため、同じHTMLファイルに対する複数のクエリによって生成が1回だけ実行されます。
HTMLファイルへのリクエストをインターセプトして、ユーザーがファイルを取得するためにPHPセッションを確立する必要があるようにします。
最良の場合、SESSION IDがURLで使用され、強制的にそれをさらなる認証として使用できます。たとえば、ログインするとSessionIDが発行され、特定のHTMLファイルのみがアクセス可能になります。
Cookieを変更することでリクエストを偽装できることは承知していますが、それで問題ありません。
これをどのように行うのですか?
解決
このような何かが動作する可能性があります(テストしていません):
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のセッションIDです)。
安全である必要があり、PHPをまったく呼び出さずにファイルがWebサーバーによって直接提供されるという利点があります。
他のヒント
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
PHPスクリプトへのURL:
RewriteEngine on
RewriteRule \.html$ script.php [L]
要求されたURIパスとクエリは、 $ _ SERVER ['REQUEST_URI']
変数で使用できます。
Webルートからファイルをキャッシュしますが、PHPがそれらにアクセスできる場所に置きます。