AGOV 注册漏洞:键盘布局如何破坏数字身份系统

AGOV 注册漏洞:键盘布局如何破坏数字身份系统

AGOV 注册中的 Shift 键漏洞

瑞士政府登录系统 AGOV 中存在一个严重的无障碍访问漏洞,导致使用 AZERTY 键盘布局的用户无法注册账户。该问题源于一个用于输入验证码的自定义 JavaScript 实现,该实现明确阻止了包括 Shift 键在内的修饰键。

由于 AZERTY 键盘需要通过 Shift 键来输入数字,这些用户被完全阻断在注册流程之外。

技术根本原因:拦截按键事件

AGOV 注册过程要求用户在六个独立的输入框中输入验证码。该系统并未采用标准的 HTML 输入字段,而是采用了一种复杂的 JavaScript 机制来拦截按键并将其存储在本地变量中。

对压缩后的 JavaScript 进行分析发现,有一个 verificationCodeEntered 函数负责处理输入逻辑。该函数包含一个 switch 语句,如果 S.key 是 "Shift"、"Control"、"Meta" 或 "v",则会明确返回(忽略)该输入。

verificationCodeEntered(_, S) {
    if ("Shift" === this.lastKeyPressed) return;
    switch (S.key) {
      case "Control":
      case "Meta":
      case "Shift":
      case "v":
      case "r":
        return;
      // ... other cases
    }
    S.preventDefault();
    const O = Number(S.key);
    isNaN(O) ? (this.getInput(_).value = "") : this.setCode(_, String(O));
}

通过调用 S.preventDefault() 并手动处理按键映射,开发人员绕过了浏览器的原生字符处理。在 AZERTY 布局下,数字不是主按键;它们需要通过 Shift + [key] 访问。由于代码明确忽略了 Shift 键,导致生成的字符永远不会被处理为数字,使得输入框保持为空,并触发“字段必填”错误。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""\n

  • Translate the following Markdown document, summary, and title to Simplified Chinese (zh-CN).
  • Rules: Preserve all Markdown formatting exactly (headings, lists,n- [x] Translate the- [x] control token (such as and and and

"- [x] Translate the following Markdown document, summary, and and

  • translation- [x] control token (such as and

  • Translate the following Markdown document, summary, and title to Simplified Chinese (zh-CN).

  • Rules: Preserve all Markdown formatting exactly (headings, lists, code blocks, links, bold, italic)

  • Do NOT translate: code blocks, inline code, S.key, S.preventDefault(), S.key is "Shift",

Sources