C6.28.3Cross-origin autofill mismatch设计研究
自动填充可能跨域填入不匹配的历史数据,带来隐私与出错风险
别名: 跨站填充 · 填充隐私 · 档案串站
概念解释
浏览器档案是按人存的,不是按网站严格隔离的(密码通常按源隔离,地址和电话往往更宽)。结果是:在购物站保存的家庭地址,可能被建议填进另一家完全无关的表单;工作邮箱被填进个人报名。跨域不匹配一边是填错场景,一边是把个人信息暴露给当前页的脚本和运营方。填充建议一旦画出完整电话或证件号,肩窥和页面脚本都能看见。
机制
地址、电话、姓名常放在浏览器的“个人资料”而不是 per-origin 保险箱。启发式只要看见类似的槽,就会在当前源弹出这份资料。恶意或只是过于贪婪的页面可以用隐藏字段接收填充(不可见的 input 仍可能被引擎填上,取决于防护)。密码管理器对密码较严,对身份字段较松。iframe 和支付小部件把源的边界弄得更乱:父页与嵌入页谁该拿到卡号,取决于浏览器的填充范围策略。用户点选建议等于授权当前页读取这些字符串,界面很少把这一授权说清楚。
怎么研究
在两个无关源上分别保存不同地址,打开第三方表单,看建议列表是否串出另一源的资料。用隐藏字段和透明字段测试是否仍被填。隐私审计应包括:填充前后页面脚本能否读到字段值、建议下拉是否在截图和录屏里暴露。实验室同意书要写明会使用真实样式的假个人数据。不要在生产账号上做跨站测试。
边界
严格的 per-origin 密码框不会把 A 站密码填进 B 站,这条主要约束身份与地址。企业浏览器可以把档案锁在配置文件里,降低串站。用户若对每个源都拒绝保存,建议列表为空。系统级“仅密码”填充模式可以关掉地址自动出现。合法的支付 iframe 需要在明确的支付源里填卡,不能因为怕跨域就把支付也禁掉。
怎么落地
- 对高敏感字段(证件、完整卡号)不要依赖宽松的个人资料填充,改走支付小部件或显式粘贴。
- 隐藏字段设 autocomplete=off 并避免可填充类型,减少隐式接收。
- 建议下拉只显示掩码(后四位、城市级地址),完整值等到用户确认当前源之后再写入。
- 验证:在干净档案里为源 A 存家庭地址、源 B 存公司地址,打开源 C 的表单,列出建议是否出现 A/B 的完整明文;出现则记为串站暴露。