Назад | Перейти на главную страницу

Конфигурация Nginx, если я отклоняю запросы, в которых отсутствует заголовок accept

Поэтому я блокирую запросы с отсутствующим / пустым пользовательский агент заголовок, потому что нет причин, по которым пользовательский агент не должен присутствовать или быть пустым, поскольку все допустимые браузеры и боты (googlebot и т. д.) отправляют этот заголовок.

##If the user agent is missing empty or contains just a single hyphen.
if ($http_user_agent ~ "^-?$") {
return 403;
}

И из моего исследования очевидно Принять заголовок всегда должен присутствовать, даже если он пуст, он должен быть отправлен независимо. Заголовок не должен отсутствовать.

Но прежде чем идти и отклонять запросы, которые не отправляют Принять header Я хотел убедиться, что он не будет иметь плохих эффектов. Я вижу, что modsecurity и несколько других (не очень уверенных в OWASP) говорят, должен ли хотя бы присутствовать заголовок accept. (Из того, что я вижу, он должен быть отправлен и разрешен доступ, если заголовок присутствует в запросе и не отсутствует.)

Я сделал следующее правило для Nginx: не использовать его в производственной среде, поскольку мне нужно больше информации о том, должен ли этот заголовок отсутствовать или нет.

## Prevent Missing Accept header
set $block_missing_accept_header 0;
#If Accept header present
if ($http_accept) {
set $block_missing_accept_header 1;
}
#Header was missing so deny request
if ($block_missing_accept_header = 0) {
return 403;
}

Это правило было моей идеей, так что вот мои размышления.

На очень большом количестве запросов я заметил, что реальные веб-браузеры (IE, Firefox, Chrome, Konqueror, Opera и другие) всегда отправляли заголовок Accept. Но роботы не всегда это делали, в зависимости от множества факторов, таких как библиотека HTTP, компетентность программиста и т. Д.

Затем роботы притворяться в веб-браузерах с поддельной строкой User-Agent иногда не хватало заголовка Accept.

Итак, идея заключалась в том, чтобы поймать роботов, которые притворяются веб-браузерами и делают это плохо, не отправляя заголовок Accept.

Чтобы реализовать это правило, вы должны также убедитесь, что строка User-Agent начинается с «Mozilla». Блокировать нельзя, если не выполняются оба этих условия: пользовательский агент утверждает, что является веб-браузером, а заголовок Accept отсутствует.

if ($http_user_agent ~ ^Mozilla) {
    set $block_missing_accept_header "Mozilla";
}
if ($http_accept = false) {
    set $block_missing_accept_header "${block_missing_accept_header}NoAccept";
}
if ($block_missing_accept_header == "MozillaNoAccept") {
    return 403;
}