ドットパスのブロック

OxPHP は、. で始まるセグメントを含むあらゆる URL パスへのアクセスをブロックし、404 Not Found を返します。これにより、.env.git/.htaccess.svn/.DS_Store のように自動スキャナーの標的になりやすい機密ファイルの漏洩を防ぎます。

Note

この保護は常に有効であり、無効化することはできません。すべてのルーティングモード(traditional、framework、SPA、worker)に適用されます。

ブロックされる対象

パスセグメントが . で始まるリクエストは、すべて 404 を返します。

リクエスト 結果
/.env 404
/.git/config 404
/.htaccess 404
/.DS_Store 404
/.docker/config.json 404
/path/.hidden/file.txt 404
/path/to/.env 404

1 段階のパーセントエンコーディングによる回避も捕捉されます。/%2egit/HEAD は 1 回デコードすると /.git/HEAD になり、拒否されます。

.well-known の例外

RFC 8615 は、/.well-known/ をサイト全体のメタデータを配置する標準的な場所として定義しています。OxPHP は、以下の制限付きで .well-known 配下のサブパスへのアクセスを許可します。

リクエスト 結果
/.well-known/security.txt 静的ファイルとして配信
/.well-known/acme-challenge/token 静的ファイルとして配信(Let's Encrypt)
/.well-known/openid-configuration ファイルが存在すれば配信、なければ ENTRY_FILE へのフォールバックまたは 404
/.well-known 404(末尾なしのパス)
/.well-known/ 404(ディレクトリ一覧)
/.well-known/test.php 404(PHP 実行はブロック)

.well-known 内の PHP ファイルは決して実行されず、常に 404 を返します。このディレクトリは静的コンテンツのみを配信します。

MIME タイプはファイル拡張子から判定されます。拡張子のないファイル(openid-configuration など)は application/octet-stream として配信されます。

制限事項

二重エンコードされた入力(/%252egit/HEAD)は 1 回だけデコードされて /%2egit/HEAD のままとなり、このレイヤーではドットセグメントとして認識されません。標準的な HTTP クライアントやブラウザは二重エンコードを行わないため、実際にこれが問題になることはほとんどありません。上流のプロキシが転送前に URI を正規化する場合は、1 回のみのデコードで十分です。

関連項目