интересная статья, но я все равно не понимаю как эта уязвимость могла сработать. При обращении к странице \.svn я ведь получу то же сообщение что страница не найдена. Роутер ведь отсечет этот запрос.
artoodetoo прав:
роутер срабатывает только для тех файлов, для которых веб-сервер не нашёл соответствующего "статического" файла
Но соль проблемы глубже. Раньше в Subversion (это, можно считать, предшественник git) папки .svn создавались не в корне репозитория, как у .git, а в каждой подпапке. Каждая такая папка содержала интересные вещи типа истории и исходников. Соответственно, если у тебя сайт деплоится из Subversion, то в твоей папке public_html (или аналога) всегда лежала "скрытая" папка .svn. Это описанная в статье уязвимость.
С git и Laravel проблема как будто не актуальна, так как git не мусорит своими папками везде, а Laravel поделен на корень и на public_html, причем public_html это подпапка в корне и потому .git в ней нет. Однако даже в Laravel есть любители перепиливать пути так, чтобы корень сайта указывал на корень фреймворка, то бишь помещают public_html в корень. А теперь добавь к этому модную нынче тенденцию все деплоить из git (я не говорю, что это плохо), и привет - в корне лежит .git, где, в отличии от Subversion, которая хранила только верхний коммит, хранится ВСЯ история и ВСЕ исходники во ВСЕХ папках данного репозитория. (Если не используется shallow repository.)
Так что будь начеку. Я лично советую всегда помещать это правило в конфиг всех хостов nginx:
location ~ /\. {
deny all;
}
Правда, это отключит и запросы ACME, так что если используется Let's Encrypt, то надо добавить и второе, пустое:
location ^~ /.well-known/ {
}
по идее не должны быть доступны
Я просто оставлю это здесь: https://habr.com/ru/post/70330/
]]>