ドットパスのブロック
OxPHP は、. で始まるセグメントを含むあらゆる URL パスへのアクセスをブロックし、404 Not Found を返します。これにより、.env、.git/、.htaccess、.svn/、.DS_Store のように自動スキャナーの標的になりやすい機密ファイルの漏洩を防ぎます。
この保護は常に有効であり、無効化することはできません。すべてのルーティングモード(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 回のみのデコードで十分です。
関連項目
- ルーティング — ルーティングモードとパスのセキュリティ