Forwarded from Hacker News
Birdwatch, Twitter's new collaborative fact checking system (Score: 153+ in 6 hours)
Link: https://readhacker.news/s/5qDEx
Comments: https://readhacker.news/c/5qDEx
Link: https://readhacker.news/s/5qDEx
Comments: https://readhacker.news/c/5qDEx
https://www.zhihu.com/answer/2745362864
这个 bug 的背景是这样的,关于国际化域名编码 Punycode,就是域名里包含有非 ASCII 字符的情况下怎么转换成 ASCII,有两版规范,旧的叫 IDNA2003,是 2003 年采纳的,新版的是 IDNA2008,是 2010 年采纳的。
IDNA2008 不是完全向后兼容 IDNA2003 的,比如上篇讲 emoji 的回答中我提到了 ZWJ 字符,在域名里包含 ZWJ 的时候,IDNA2003 会删除它,而 IDNA2008 会保留它,从而在转成 Punycode 后会产生不一样的 URL:(图一 Chrome,图二 Safari)
类似的存在兼容性问题的字符一共有四个:(图三)
Chrome 也计划和 Safari 一样改成支持新版的规范,但是在动手之前,他们想看看影响到的域名有多少,所以就加了一段代码,统计真实环境中域名里出现这四个字符的次数:(图四)
就是这段代码引入了崩溃的 bug,写代码的人错误的假设了域名里的分隔符都是正常的点,而实际上国际化域名里允许输入其它三种分隔符。(图五)其中 U+3002 就是我们常见的中文句号,这三个分隔符不管在地址栏输入还是在代码里都会被自动转换成 ASCII 的点:(图六)
这个 bug 已经在 10 月份的时候修复,我测试了目前的 Beta 版本 108 里已经是好的了。
这个 bug 的背景是这样的,关于国际化域名编码 Punycode,就是域名里包含有非 ASCII 字符的情况下怎么转换成 ASCII,有两版规范,旧的叫 IDNA2003,是 2003 年采纳的,新版的是 IDNA2008,是 2010 年采纳的。
IDNA2008 不是完全向后兼容 IDNA2003 的,比如上篇讲 emoji 的回答中我提到了 ZWJ 字符,在域名里包含 ZWJ 的时候,IDNA2003 会删除它,而 IDNA2008 会保留它,从而在转成 Punycode 后会产生不一样的 URL:(图一 Chrome,图二 Safari)
类似的存在兼容性问题的字符一共有四个:(图三)
Chrome 也计划和 Safari 一样改成支持新版的规范,但是在动手之前,他们想看看影响到的域名有多少,所以就加了一段代码,统计真实环境中域名里出现这四个字符的次数:(图四)
就是这段代码引入了崩溃的 bug,写代码的人错误的假设了域名里的分隔符都是正常的点,而实际上国际化域名里允许输入其它三种分隔符。(图五)其中 U+3002 就是我们常见的中文句号,这三个分隔符不管在地址栏输入还是在代码里都会被自动转换成 ASCII 的点:(图六)
这个 bug 已经在 10 月份的时候修复,我测试了目前的 Beta 版本 108 里已经是好的了。
👍5