德国铁路的 Linux 锁定:当机器人检测出错
对于 Linux 操作系统的用户来说,通过德国铁路(DB)预订火车票最近变得令人沮丧。这一举措凸显了僵化自动安全的陷阱,德国铁路公司的网站开始阻止那些浏览器标识为在 Linux 上运行的用户访问其连接搜索和预订工具。
此问题在技术社区引发了广泛讨论,说明过于简单的机器人检测机制可能会无意中疏散合法的用户群体。
"机器人" 错误:错误代码 751
来自 Reddit 等平台的用户以及 heise online 编辑团队的报告表明,Linux 用户在尝试搜索连接时会遇到特定的错误消息。错误页面显示 Error Code 751,伴有以下纯文本警告:
"我们很抱歉,在此过程中发生了错误。您的浏览器行为类似于机器人。"
有趣的是,这种锁定并非在整个站点普遍发生。虽然主页 (bahn.de) 仍然可访问,但错误通常在用户发起连接搜索请求的瞬间触发。一些用户报告错误会立即出现,而另一些用户则在多次尝试后才遇到。
根本原因:User-Agent 过滤
技术分析表明,该阻塞并非基于 IP 地址或复杂的行为分析,而是通过对浏览器的 User-Agent (UA) 字符串 进行简单检查来实现的。User-Agent 是浏览器发送给服务器的一段信息,用于标识操作系统和浏览器版本。
heise online 进行的测试证实,该阻塞与 UA 字符串中存在 "Linux" 一词特定相关。不同浏览器的结果保持一致:
- Windows 11 上的 Firefox: 如果手动将 User-Agent 修改为包含 "Linux",网站会触发机器人错误。
- Linux 上的 Chrome: 尽管是主流浏览器,如果 UA 字符串将操作系统标识为 Linux,Chrome 用户将被阻止。
- macOS 上的 Safari: 即使在 macOS 上,通过伪装 Linux User-Agent 也可能触发该阻塞。
本质上,如果服务器在标识符中看到 "Linux",它就会假设请求来自机器人,而不管实际的浏览器或行为如何。
受影响用户的解决方法
对于当前无法预订车票的用户,解决方案是“欺骗” User-Agent,使浏览器看起来像是在 Windows 上运行。
在 Firefox 中,可以通过以下步骤实现:
- 在地址栏中输入
about:config并接受风险。 - 搜索
general.useragent.override。 - 创建一个新的字符串条目,使用基于 Windows 的 User-Agent 标识符。
一旦标识符从 "Linux" 更改为 "Windows",预订系统的访问权限将立即恢复。
分析:“Vibe Coding” 安全的危险
虽然德国铁路尚未提供官方解释,但社区推测这种粗暴的安全工具可能是如何实现的。一位 Hacker News 评论者认为这可能是“振动编码”的结果——即使用大型语言模型(LLMs)生成安全补丁,而缺乏深入的架构审查。
"有人通过振动编码尝试改进安全,他们的 LLM 建议将 User-Agent 字符串限制为前 10 个代理中的某些数量。就这样——没有 Linux。"
无论是 LLM 建议的结果还是遗留安全规则的结果,结果都是一样的:未能认识到相当一部分技术人群使用 Linux。通过将整个操作系统视为“类机器人行为”的代理,DB 创建了一种安全措施,实际上提供的保护甚微(因为真正的机器人可以轻易伪造 User-Agent),同时积极损害了合法客户的用户体验。
此事件提醒我们,安全应基于行为和意图,而不应仅依赖客户端提供的表面标识符。