Apache設定ファイルのRewriteRuleとDenyの適用順番
前回の Apache設定ファイルのSetEnv/SetEnvIf適用順番 と似たような記事です。
確認したいこと
VALUE-SERVERの現行Apache 2.2の.htaccessで、RewriteRuleとDenyの適用順番を確認したい
実験
まずはやってみる
.htaccess
RewriteCond REMOTE_ADDR .*
RewriteRule .* - [E=HOGE:deny]
Order Deny,Allow
Deny from env=HOGE
解説
- クライアントのIPアドレスが正規表現で.*であるかどうか?=全てに一致するので、常に条件を満たす
- .htaccessの置いてあるディレクトリ部分を除いたURLのパス指定部分が正規表現で.*である部分(つまり全て)を無変更とし、環境変数HOGEに値denyを設定する
- Orderはまず全てをAllowとした上で、Deny処理を適用後に、Allow処理を入れるという宣言
- 環境変数HOGEが設定されていたら全てDenyとする
つまり、記述された順番どおりに適用されるなら、全て403 Forbiddenにするという設定
結果
こちら(VALUE SERVER上なのでConoHaに移行した現在はない)に上記.htaccessを置いたが、200 OKで見えてしまっていた。RewriteRuleの適用順序がDenyよりも遅い可能性が高まった。
RewriteRuleで環境変数を設定できていることの確認
.htaccess
RewriteCond REMOTE_ADDR .*
RewriteRule .* - [E=HOGE:deny]
Header set X-Frame-Options %{HOGE}e env=HOGE
解説
前回記事とあわせて全て説明されているので詳細は省略。環境変数経由でHTTPレスポンスヘッダX-Frame-Optionsにdenyを設定している。
結果
こちら(VALUE SERVER上なのでConoHaに移行した現在はない)に上記.htaccessを置いたが、Chromeの開発者ツールのネットワークで、以下のレスポンスが確認できた。
HTTP/1.1 200 OK
...
X-Frame-Options: deny
...
つまり、RewriteRuleの記述に問題はない→最初の実験の設定では、RewriteRuleより先にDenyが評価されている。
DenyをFilesMatchセクションに置いたら、評価が遅くならないか確認
.htaccessで置けるセクションとしてはFileかFilesMatchだと思うので、その条件で最初の実験を再確認する。
.htaccess
RewriteCond REMOTE_ADDR .*
RewriteRule .* - [E=HOGE:deny]
<FilesMatch ".*">
Order Deny,Allow
Deny from env=HOGE
</FilesMatch>
解説
FilesMatchは、ファイルシステムベースでのファイル名でマッチングをかけるセクション。このケースではどんなファイル名でも該当する。なので最初の実験と内容は同じ。
結果
こちら(VALUE SERVER上なのでConoHaに移行した現在はない)に上記.htaccessを置いたが、最初の実験同様見えてしまっている。こう書いてもRewriteRuleの適用順序がDenyよりも遅い 。
結論
VALUE-SERVERの現行Apache 2.2の.htaccessでは、Deny→RewriteRuleの順で適用される。
※Apacheが2.4だったり、server configに記載された場合などは確認していない
ディスカッション
コメント一覧
まだ、コメントがありません