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

Nginx: добавление браузеров в белый список

Я пытаюсь настроить белый список браузеров, которым разрешено посещать статический веб-сайт, размещенный на сервере nginx.

Я нашел в документация ссылка на modern_browser директива.

Это кажется интересным, но у меня остались вопросы: - Как определить браузер Chrome? (допустим, я хочу обнаружить Chrome 60 и Safari 11) - Как я могу узнать, мобильный это Chrome или Safari?

Директивы modern_browser * не просто ужасно устарели для сегодняшних практических целей, они больше не нужны сегодня. Вы можете просто сопоставить актуальные теперь браузеры на карте регулярных выражений.

Предполагая, что вы делаете это прямо сейчас:

modern_browser_value "modern.";
ancient_browser_value "unpatched.";
modern_browser gecko 60;
index index.${modern_browser}html index.${ancient_browser}html index.html;

Следующее выполняет аналогичное сопоставление, но позволяет более детально управлять:

map $http_user_agent $browser_prefix {
   "~Mozilla/5.0 \(.+ rv:[6789][0-9]\.[0-9.]*\).* Firefox/[0-9.]*$" "modern."
   "~Mozilla/5.0 \(Android" "unpatched.";
   default "unpatched.";
}
index index.${browser_prefix}html index.html;

Вы можете использовать полученный $variable таким же образом, включая прямой отказ в доступе, например

if ($browser_prefix = "unpatched.") {return 403;}

Поскольку в вашем вопросе упоминается белый список, вот список причин люди используют обнаружение браузера, когда они не должны этого делать:

  • Работа над ошибками браузера
    • Обычно существует обходной путь, который намного проще поддерживать в течение длительного времени, путем изменения разметки или javascript. Обычно обходной путь уже упоминается в трекере ошибок соответствующего браузера.
  • Контроль доступа
    • Если вы хотели использовать строку User-Agent в качестве пароля, вам следовало бы вместо этого использовать обычную аутентификацию - она ​​имеет аналогичные свойства безопасности, но была разработана для таких целей и, следовательно, намного более надежна.
  • Обнаружение функций браузера (например, может ли он воспроизводить определенные видеокодеки?)
    • Вы не получите ответа из строки пользовательского агента. Функции добавляются в браузер постоянно, и таким образом вы не можете сказать, отключил ли пользователь уже поставленные функции или включил функции, которые еще не используются по умолчанию.