Недавно мы развернули Anubis на нашем сервере для защиты от ресурсоёмких краулеров ИИ. Он возвращает статическую страницу с заголовком «Убедимся, что вы не бот!» для запросов с пользовательскими агентами, похожими на браузерные, выполняет доказательство работы на JavaScript, а затем перенаправляет на нужную страницу. Пользовательские агенты, в названии которых нет слова «Mozilla», могут получить прямой доступ к странице.
Теперь предпросмотры ссылок Onebox в Discourse не работают, но только для встроенных ссылок.
Проанализировав логи сервера, я обнаружил, что Discourse отправляет два разных типа пользовательских агентов:
Discourse Forum Onebox v3.4.1 для больших предпросмотров ссылок Onebox (см. lib/onebox/helpers.rb#L217-L226 в версии 03f3e84ce520d375aa1c66bb0e95cc5ed9832776)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15 для предпросмотров встроенных ссылок (см. lib/final_destination.rb#L40 в версии 03f3e84ce520d375aa1c66bb0e95cc5ed9832776)
Я пробовал включить опцию «Принудительно использовать пользовательский агент для указанных хостов» в настройках администратора, которая гласит: «Хосты, для которых следует использовать пользовательский агент Onebox во всех запросах», но это не дало никакого эффекта.
Также я тестировал изменение скрытой настройки onebox_user_agent, но она меняет только пользовательский агент для обычных предпросмотров ссылок Onebox, а не для встроенных.
Мне это кажется ошибкой: не логичнее ли было бы использовать тот же настраиваемый пользовательский агент Discourse Forum Onebox и для предпросмотров встроенных ссылок?
Я получаю два разных onebox: один запрос HEAD с пользовательским агентом браузера и один запрос GET с идентифицируемым пользовательским агентом. Если запрос HEAD перенаправляется (на страницу с вызовом), следуют ещё три запроса, все к перенаправленной странице.
Мне нужно добавить все запросы HEAD в белый список нашей системы вызовов, чтобы onebox работал. Это касается как inline-onebox, так и block-onebox.
Это похоже на запрос новой функции, а не на баг. Inline onebox и onebox — это разные функции, которые используют сеть по-разному. Возможно, нам понадобится ещё одна настройка сайта.
Я не против добавить ещё одну скрытую настройку для inline onebox — по крайней мере, это снимет блокировку.
PR с настройкой inline_onebox_user_agent, скрытой по умолчанию, был принят. Вы можете использовать её для переопределения заголовка User-Agent для встроенных onebox-объектов.
@osmith, не могли бы вы подтвердить, что эта настройка решает проблему со встроенными ссылками и Anubis?
Сейчас я не могу это проверить. Но если скрытая настройка, как описано, переопределяет user-agent, то это решает проблему с встроенными ссылками и Anubis. Спасибо за реализацию!