一行正则表达式如何让全球互联网瘫痪27分钟——从Cloudflare宕机事件看回溯灾难的技术真相

2019年7月2日,一个普通的周二下午,全球数十万网站突然无法访问。Cloudflare的全球服务中断了27分钟,受影响的网站包括Discord、Omegale、Buffer等知名服务。这不是黑客攻击,不是硬件故障,也不是配置错误。罪魁祸首是一行正则表达式。 ...

18 min · 8925 words

正则表达式性能优化:从NFA引擎原理到高效模式编写的完整教程

2007年,Russ Cox发表了一篇影响深远的文章《Regular Expression Matching Can Be Simple And Fast》。他做了一个令人震惊的对比测试:用正则表达式 a?^n a^n(n个可选a后跟n个a)匹配字符串 a^n(n个a)。当n=29时,Perl需要超过60秒,而Thompson NFA实现只需要20微秒——相差三百万倍。更惊人的是,当n=100时,Thompson NFA只需不到200微秒,而Perl理论上需要超过10^15年。 ...

11 min · 5425 words

一行正则如何拖垮全球服务:从Cloudflare事故看回溯灾难的技术本质

2019年7月2日,Cloudflare的全球网络在27分钟内完全瘫痪。原因不是黑客攻击,不是硬件故障,而是一行正则表达式:(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\|-|+)+[)];?((?:\s|-|~|!|{}||||+).(?:.=.*)))`。 ...

10 min · 4692 words

正则表达式的阴暗面:为什么一行代码能让服务器瘫痪二十七分钟

2019年7月2日,保护着全球约20%互联网流量的Cloudflare遭遇了一次持续27分钟的全球性宕机。原因令人意外:一个正则表达式。 更准确地说,是这个正则表达式: ...

12 min · 5756 words