既に配布も終了している EC-CUBE 3 系ですが、たまに触る機会があって設定に問題ないかなとか見るのですが、とあることが気になって色々調べている最中に下記の記事を読ませていただきました。
EC-CUBE 3 系の .htaccess ですが、まさにこの記事通りで Apache 2.4 で下記のサンプル部分のコメントアウトを外して利用しようとすると .htaccess
や .htpasswd
などの .ht
で始まるファイルへのアクセス制限が上書きされたりサブディレクトリへのアクセス制限が上書きされるようです。(Apache2.2用とは書いていますが)
# 管理画面へのBasic認証サンプル(※Apache2.2用) # # Satisfy Any # # AuthType Basic # AuthName "Please enter username and password" # AuthUserFile /path/to/.htpasswd # AuthGroupFile /dev/null # require valid-user # # SetEnvIf Request_URI "^/admin" admin_path # ^/adminは, 管理画面URLに応じて変更してください # Order Allow,Deny # Allow from all # Deny from env=admin_path
原因としては記事の著者も書かれている通り mod_access_compat の Satisfy Any
が Require all denied
の設定を上書きしてしまうからでしょう。Apache 2.4 からは .ht
ファイルへのアクセスは Require all denied
が使われています。
<Files ".ht*"> Require all denied </Files>
Satisfy Any
& Allow from all
はサブディレクトリに対しても効くようで、html/template/.htaccess
を Require all denied
で作成しても .htaccess を閲覧できてしまいますし、.htaccess ファイルだけなく .htaccess で設定したサブディレクトリの Require all denied
の効果を無効にしてしまうようです。(その結果中が全部見れる)
ちなみに下記部分ですが、このままコメントアウトを外して使おうとすると SetEnvIf
の 3 番目以降の引数は環境変数として設定されるので admin_path
だけでなくそれ以降の文字列も環境変数になります。
# SetEnvIf Request_URI "^/admin" admin_path # ^/adminは, 管理画面URLに応じて変更してください
phpinfo を見てみるとこのように設定されているのがわかります。(だから何ができるかってわけではないのですが)
話が逸れましたが Apache 2.4 で EC-CUBE 3 系を使用している場合は上記の罠を踏んでいないか注意した方がよさそうです。EC-CUBE 4.0.1 以降は RequireAll
に変更されているのでこの問題は起きないと思われます。
EC-CUBE というよりは Apache の仕様なのですが何らかの理由で Satisfy Any
を設定している場合はアクセス制限が正しく効いているか確認した方がいいでしょう。
もう mod_access_compat 使えないようにしたい…。