ディレクトリリスティング表示でアレっと思った話
WordPress 環境初期構築中に一時的にディレクトリリスティング表示を有効にしていてちょっとアレッと思ったお話
前提
/wp-content/uploads/
配下に置いてある PHP ファイルの実行できないようにした- 403 返す形
- 一時的にディレクトリリスティング表示は有効にしていた
結論
/etc/httpd/conf.d/php.conf
にDirectoryIndex index.php
が指定してあったため
内容
WordPress 管理画面からファイルアップロードなどを行うと /wp-content/uploads/YYYY/MM/
な形で配置されると思います。
ただ uploads 配下は権限が 777 となっており、そこに PHP ファイルとか置かれると実行されてしまうので、下記の設定を入れました。
<LocationMatch "^/wp-content/uploads/.+\.php$">
Require all denied
</LocationMatch>
上記設定の動作確認を行うために下記ファイルを設置
# ls wp-content/uploads/
test.php test.png
test.php にアクセスすると 403 を期待
# curl localhost/wp-content/uploads/test.php -I HTTP/1.1 403 Forbidden Date: Fri, 06 Jul 2018 01:29:13 GMT Server: Apache Content-Type: text/html; charset=iso-8859-1
- => 403 が返っているので OK !
test.png にアクセスすると 200 を期待
# curl localhost/wp-content/uploads/test.png -I HTTP/1.1 200 OK Date: Fri, 06 Jul 2018 01:29:49 GMT Server: Apache Last-Modified: Fri, 06 Jul 2018 01:25:52 GMT ETag: "0-5704a8b7067c2" Accept-Ranges: bytes Content-Type: image/png
- => 200 が返っているので OK !
OK ですね。
ただ下記を実行した時にアレっと思ったのです。
# curl localhost/top/wp-content/uploads/ -I
HTTP/1.1 403 Forbidden
Date: Fri, 06 Jul 2018 01:31:25 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
ディレクトリリスティングを有効にしているのでファイルの一覧が表示されるはずですがなぜか 403 ...
正規表現間違えたかなぁ、Options Indexes
より LocationMatch
の方が優先順位ががが、と色々考えつつも解決せず...
色々設定見てたら DirectoryIndex index.php
が設定されているのを発見。
localhost/top/wp-content/uploads/
にアクセスDirectoryIndex index.php
によりindex.php
が補完localhost/top/wp-content/uploads/index.php
にアクセス- 拡張子 .php は 403 返す設定にしているので 403 が返る
そりゃそうですよねって感じの経験でした。
DirectoryIndex index.php
をコメントアウトして同じことを実施すると想定通りの動作になりました。