Inline-onebox 不会使用 SiteSetting.onebox_user_agent

您好,

我们最近在服务器上部署了 Anubis 来防御资源密集型的 AI 爬虫。它会向带有类浏览器用户代理的请求发送一个静态页面,标题为“正在确认您不是机器人!”然后进行 JavaScript 难度证明,最后重定向到正确的页面。用户代理名称中不包含 Mozilla 的请求可以直接访问页面。

现在,Discourse 的 onebox 链接预览已损坏,但仅限于内联链接。

查看服务器日志,Discourse 发送了两种不同类型的用户代理:

  • Discourse Forum Onebox v3.4.1 用于大的 onebox 链接预览(请参阅 03f3e84ce520d375aa1c66bb0e95cc5ed9832776 中的 lib/onebox/helpers.rb#L217-L226

  • 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 用于内联链接预览(请参阅 03f3e84ce520d375aa1c66bb0e95cc5ed9832776 中的 lib/final_destination.rb#L40

我尝试了管理设置中的“强制自定义用户代理主机”,该设置声称“用于在所有请求上使用自定义 onebox 用户代理的主机。”,但没有起到任何作用。

我也尝试更改了 onebox_user_agent 隐藏设置,但这只会更改常规 onebox 链接预览的用户代理,而不会更改内联预览的用户代理。

在我看来,这似乎是一个 bug,难道不应该为内联链接预览也使用相同的可配置的“Discourse Forum Onebox”用户代理吗?

谢谢!

1 个赞

我收到了两个不同的 onebox 请求,一个使用浏览器用户代理的 HEAD 请求,以及一个使用可识别用户代理的 GET 请求。如果 HEAD 请求被重定向(到一个挑战页面),则会跟随三个请求,所有这些请求都指向重定向的页面。

我必须在我们的挑战系统中将所有 HEAD 请求列入白名单,才能使 onebox 工作。不仅是内联 onebox,也包括阻止 onebox。

这感觉更像是功能请求而非错误。内联 onebox 和 onebox 是不同的功能,它们以不同的方式使用网络。也许我们需要另一个站点设置。

我同意至少再添加一个隐藏的内联 onebox 设置,这样可以解除您的阻塞。