# [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` и отказаться от регулярных выражений.