Блокировка путей с точкой

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

Одноуровневые обходы через percent-кодирование также перехватываются: /%2egit/HEAD декодируется один раз в /.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 заблокировано)

PHP-файлы внутри .well-known никогда не выполняются — они всегда возвращают 404. Этот каталог отдаёт только статическое содержимое.

MIME-типы определяются по расширению файла. Файлы без расширения (например, openid-configuration) отдаются как application/octet-stream.

Ограничения

Входные данные с двойным кодированием (/%252egit/HEAD) декодируются только один раз и остаются /%2egit/HEAD, который на этом уровне не распознаётся как сегмент с точкой. Стандартные HTTP-клиенты и браузеры не применяют двойное кодирование, поэтому на практике это редко имеет значение; если ваш вышестоящий прокси нормализует URI перед пересылкой, однопроходного декодирования достаточно.

Смотрите также