mattintosh note

どこかのエンジニアモドキの備忘録

特定の環境下でEC-CUBE 4系の.envなどへのアクセス制限が効かない問題

現状の EC-CUBE.htaccess ではアクセス制限に大小文字の考慮がされていないため特定の環境下でアクセス制限が適切に効かないことがありました。

「特定の環境下」というのがかなり限定的なのですがいまのところ確認しているのは下記の環境です。

Linux で使用するファイルシステムは大小文字を区別するため LinuxApache はリクエストで受け取ったパスをそのまま各処理に流しているようです。例えば /.env というリクエストは .env(403)を返しますし、/.Env というリクエストは .Env(404)を返します。

しかし、macOS で採用されている HFS や APFS はデフォルトでは大小文字を区別しないようになっているため、ホストのファイルシステムマッピング(という言い方が正しいかはわかりませんが)するときに /.Env などのリクエストを .env(200)として返してしまうようです。

同様に大小文字を区別しない FAT 系ファイルシステムでも同じことが起きます。(ほとんどいないとは思いますが例えば USB メモリなどの FAT 系でフォーマットされた外付けのストレージで運用しているような場合)

WindowsApache(XAMPP)ではリクエストを受け取ったあと、RewriteRule 時にファイルシステムマッピングしているのか、/.Env というリクエストをファイルシステム上に存在するファイルまたはディレクトリ(ここでは .env)に直してパターンマッチングしているためこのすり抜けは起きないようでした。(XAMPP 以外の Apache は試してないですが Windows に合わせた考慮がされてるはず?)

一般的な EC-CUBE の実行環境は Unix/Linux で大小文字を区別するファイルシステムと併用しているはずなのでこのすり抜けは起きないと思いますが、Files/FilesMatch や RewriteRule では大小文字どちらのリクエストでも弾けるようにしておいた方が安全かもしれません。

個人的には下記の記事で書いたようにルートディレクトリに index.php を置かない運用の方が望ましいとは思うのですが需要を考えると難しいのでしょうか…。(ルートディレクトリに色々置きすぎて .htaccess で対応するのは限界な気がする)