Я запустил dotdotpwn для проверки поперечных атак на веб-сервер с использованием nginx / nasxi / doxsi, и единственными «удачными» были URL-адреса, которые начинались со знака вопроса. Ничего страшного, так как они просто по умолчанию использовали index.html, но в качестве учебного процесса я хочу отмечать такие запросы с помощью 403. В настоящее время я обслуживаю статические страницы.
Это моя попытка уловить такие запросы:
location ~ [\?=+-] {
return 403;
}
Это не работает. (Если бы это было так, я бы разместил здесь пост? ;-))
Единственное, что я использую не буквенно-цифровые, - это подчеркивание, так что в конечном итоге я хотел бы выделить все специальные символы.
Итак, в документации nginx сказано, что директива location соответствует URI запроса.
Способ, которым nginx определяет URI, является частью после домена и до параметров URL. Так, например, /index.html
или /foo/bar/index.php
могут быть URI. Для вашей цели это означает, что директива location никогда не будет совпадать с ?, если только это не URL, закодированный как часть URI, а не для параметров URL.
Если вы действительно хотите сделать это, вам придется сделать
if ($request_uri ~ regex) {
return 444;
}