Я бы хотел отключить обратный путь в каталогах, например example.com/page/../other-page
(даже для реальных страниц) на моем веб-сайте IIS.Я пробовал фильтрацию запросов и перезапись URL с пользовательским ответом.
Документация Microsoft по части denyUrlSequences
фильтрации запросов фактически использует ..
в качестве примера :
В следующем примере файла Web.config
будет запрещен доступ к трем последовательностям URL.Первая последовательность предотвращает обход каталога, […]
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=".." />
[...]
… но это не работает;example.com/page/../other-page
уже стал example.com/other-page
еще до того, как запустится правило запрета.Вы можете доказать это, установив правило Запрета для page/sub
и посетив example.com/page/./sub-page
.Нормализованный путь заблокирован правилом, но он не соответствовал бы в исходном состоянии.
Я проверил это на IIS v7.5 и v10, и я полагаю, что он существует в каждой промежуточной версии,тоже.
- Что делает нормализация?(Вероятно, эта библиотека ?)
- Когда это происходит в жизненном цикле запроса?
- Как успешно заблокировать следующие последовательности, не открывая дыру в безопасности?
..
, ./
и //
Поиски в Интернете хотят только рассказать мне об уязвимости около 2000 в старой версии IIS или о том, как включить маршруты MVC с точками вих.
Примечание отладки: Если вы используете curl
для проверки этого поведения, обязательно добавьте параметр --path-as-is
, чтобы он нене делайте нормализацию в клиенте.В некоторых браузерах также выполняется нормализация на стороне клиента.
Примечание по использованию: Я номинально пытаюсь завершить работу example.com/clubs-baby-seals/../about-us
, чтобы кто-то не принял успешную загрузку ссылки какодобрение жестокого обращения с печатью.