Hacker News 中文摘要

RSS订阅

让我写数字就好 -- Just Let Me Write Digits

文章摘要

文章讨论了数字身份在网络安全中的争议,包括年龄验证、用户身份核实及操作系统依赖等问题,并以瑞士政府登录系统AGOV为例,说明其已成为处理失业、报税等强制性事务的核心工具。

文章总结

好的,作为一名专业的中文编辑,我将对这篇文章进行中文重述,保留核心细节,并删减与主题无关的内容。


文章重述:请让我输入数字

本文作者在注册瑞士政府登录系统AGOV时,遭遇了一个奇怪的无障碍性错误。AGOV自2024年部署以来,已有160万账户,并成为申请失业险、报税、申请公民身份等服务的强制登录入口。

问题描述: 作者在注册时,需要输入一个6位数的邮箱验证码。但输入框的行为异常:每输入一个数字,焦点不会自动跳到下一个框,而是将多个数字堆积在第一个框内并标红。即使手动逐个框输入,最终也会提示“字段必填”的错误。

排查过程: 1. 环境测试:作者尝试了Firefox、Chromium、Chrome、Safari等多种浏览器,以及Linux和macOS系统,均出现相同错误。这排除了浏览器或操作系统不兼容的可能性。 2. 寻求支持:AGOV唯一的支持渠道是另一个需要邮箱验证码的在线表单,这形成了“先有鸡还是先有蛋”的死循环。官方FAQ也确认了这一点。此外,AGOV的Android应用评分仅为1.4星,但评论中未提及类似问题。 3. 意外发现:作者在同事的电脑上(使用英文键盘布局)尝试时,表单竟然正常工作,并提示“验证码错误”。这暗示问题与键盘布局有关。 4. 代码分析:作者通过分析网页的JavaScript代码,找到了关键函数verificationCodeEntered。该函数会拦截按键事件,并明确排除了Shift键。而作者使用的是法式AZERTY键盘布局,在这种布局下,输入数字必须同时按住Shift键。因此,Shift键被屏蔽,导致数字无法被正确输入。

结论与反思: * 问题根源:AGOV的验证码输入逻辑错误地屏蔽了Shift键,导致使用AZERTY等需要Shift键输入数字的键盘布局的用户无法完成注册。瑞士官方使用的QWERTZ键盘布局则不受影响。 * 身份验证的漏洞:作者发现,注册过程并未真正验证其身份(姓名、电话、生日均为自行填写),仅验证了邮箱和二次验证设备。这引发了对其安全模型的质疑。 * 事后总结: * 失败之处:使用复杂的JavaScript逻辑处理6个输入框,而非原生表单字段;将表单逻辑与DOM完全解耦,导致用户无法通过编辑DOM修复;仅提供单一支持渠道,且该渠道与主产品使用相同的登录逻辑,形成了反馈闭环;在系统强制使用前未公开源代码。 * 成功之处:相关的JavaScript逻辑未被深度混淆,通过简单的字符串搜索即可定位问题;代码部署在开放的Web上,便于用户下载分析。 * 幸运之处:作者手头有多台不同键盘布局的电脑,这帮助他快速排除了其他可能性。

作者最终通过切换键盘布局完成了注册,并已通过支持表单报告了此错误,但尚未收到回复。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 批评六格输入框设计:多位评论者指出,这种设计用JavaScript替代了原生、国际支持的输入机制,导致问题。例如,AZERTY键盘的数字需按Shift键,而JS处理原始键码而非字符(评论2)。评论3质疑为何六格输入框成为默认,认为应使用单个样式化输入字段。

  2. 用户体验问题:评论6提到,输入最后一位时自动提交表单,若输错无法撤回,导致验证失败和等待。评论9指出在X.com上无法纠正错误数字。评论10批评表单拒绝空格或破折号,认为后端应自动处理。

  3. 对政府网站的失望:评论7认为,注册失败的用户无法提交工单,且对政府网站修复不抱希望。

  4. 替代方案建议:评论5指出,实际用户并不关心输入框样式,只需功能正常。评论13建议使用原生<form><input>,零JavaScript即可提供更好体验。

平衡性观点:

  • 正面反馈:评论4表示,在特定网站上输入数字时光标自动跳转,删除时回退,功能正常,可能已修复。
  • 自动填充优势:评论11提到,苹果生态系统中此类输入通常自动填充。

关键引用(保留中英文):

  • 评论2:“Web developer classic: use Javascript to replace the native, working, internationally supported standard inputs...”(Web开发者经典:用JavaScript替换原生、工作正常、国际支持的输入...)
  • 评论6:“Another peeve...when entering the last digit automatically submits the form...”(另一个烦恼是输入最后一位时自动提交表单...)
  • 评论7:“I'm not so surprised, given that you cannot write support tickets if the bug prevents you from registering...”(我不惊讶,因为如果错误阻止注册,你无法提交工单...)
  • 评论13:“Yet another example where using
    and with zero JavaScript would be a better user experience.”(又一个例子,使用零JavaScript的原生表单和输入会提供更好用户体验。)