gixy/docs/ru/plugins/origins.md

33 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# [origins] Проблемы валидации referrer/origin
Нередко валидация заголовка запроса `Referer` или `Origin` делается при помощи регулярного выражения.
Зачастую, это необходимо для условного выставления заголовка `X-Frame-Options` (защита от ClickJacking) или реализации Cross-Origin Resource Sharing.
Наиболее распространенно два класса ошибок конфигурации, которые приводят к этой проблеме:
- ошибки в составлении регулярного выражения;
- разрешение не доверенных third-party доменов.
> По умолчанию Gixy не валидирует регулярные выражение на предмет матчинга third-party доменов, т.к. не знает кому можно верить.
Передать список доверенных доменом можно при помощи опции `--origins-domains example.com,foo.bar`
## Как самостоятельно обнаружить?
Все довольно "просто":
- необходимо найти все директивы `if`, которые делают проверку переменной `$http_origin` или `$http_referer`;
- убедится что в регулярном выражении нет проблем.
Пример плохой конфигурации:
```nginx
if ($http_origin ~* ((^https://www\.yandex\.ru)|(^https://ya\.ru)/)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
}
```
TODO(buglloc): описать типичные проблемы при составлении регулярных выражений
TODO(buglloc): Regex Ninja?
## Что делать?
- исправить регулярное выражение или отказаться от него вовсе :)
- если вы проверяете заголовок запроса `Referer` то, возможно (имеются противопоказания), лучшим решением было бы воспользоваться модулем [ngx_http_referer_module](http://nginx.org/ru/docs/http/ngx_http_referer_module.html);
- если вы проверяете заголовов запроса `Origin` то, зачастую, лучше использовать `map` и отказаться от регулярных выражений.