Нередко валидация заголовка запроса Referer
или Origin
делается при помощи регулярного выражения.
Зачастую, это необходимо для условного выставления заголовка X-Frame-Options
(защита от ClickJacking) или реализации Cross-Origin Resource Sharing.
Наиболее распространенно два класса ошибок конфигурации, которые приводят к этой проблеме:
По умолчанию Gixy не валидирует регулярные выражение на предмет матчинга third-party доменов, т.к. не знает кому можно верить. Передать список доверенных доменом можно при помощи опции
--origins-domains example.com,foo.bar
Все довольно "просто":
if
, которые делают проверку переменной $http_origin
или $http_referer
;Пример плохой конфигурации:
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;Origin
то, зачастую, лучше использовать map
и отказаться от регулярных выражений.