現状の EC-CUBE の .htaccess ではアクセス制限に大小文字の考慮がされていないため特定の環境下でアクセス制限が適切に効かないことがありました。
「特定の環境下」というのがかなり限定的なのですがいまのところ確認しているのは下記の環境です。
- Docker for Mac 上の Linux 版 Apache と大小文字の区別が無い HFS/APFS を使用した場合
- Linux 版 Apache で EC-CUBE のファイルシステムに FAT 系(FAT32 など)を採用した場合
Linux で使用するファイルシステムは大小文字を区別するため Linux 版 Apache はリクエストで受け取ったパスをそのまま各処理に流しているようです。例えば /.env
というリクエストは .env
(403)を返しますし、/.Env
というリクエストは .Env
(404)を返します。
しかし、macOS で採用されている HFS や APFS はデフォルトでは大小文字を区別しないようになっているため、ホストのファイルシステムにマッピング(という言い方が正しいかはわかりませんが)するときに /.Env
などのリクエストを .env
(200)として返してしまうようです。
同様に大小文字を区別しない FAT 系ファイルシステムでも同じことが起きます。(ほとんどいないとは思いますが例えば USB メモリなどの FAT 系でフォーマットされた外付けのストレージで運用しているような場合)
Windows 版 Apache(XAMPP)ではリクエストを受け取ったあと、RewriteRule
時にファイルシステムにマッピングしているのか、/.Env
というリクエストをファイルシステム上に存在するファイルまたはディレクトリ(ここでは .env
)に直してパターンマッチングしているためこのすり抜けは起きないようでした。(XAMPP 以外の Apache は試してないですが Windows に合わせた考慮がされてるはず?)
一般的な EC-CUBE の実行環境は Unix/Linux で大小文字を区別するファイルシステムと併用しているはずなのでこのすり抜けは起きないと思いますが、Files/FilesMatch や RewriteRule では大小文字どちらのリクエストでも弾けるようにしておいた方が安全かもしれません。
個人的には下記の記事で書いたようにルートディレクトリに index.php を置かない運用の方が望ましいとは思うのですが需要を考えると難しいのでしょうか…。(ルートディレクトリに色々置きすぎて .htaccess で対応するのは限界な気がする)