[闲聊] Cloudflare 发生问题的 RegEx

楼主: CMJ0121 (请多指教!!)   2019-07-13 22:12:51
在 Clludflrae[0] 的官方文章中提到了 大家想知道发生问题的 regex 为何
根据文章中提到出现问题的 regex 因为出现了 .*(?:.*=.*) 导致出现 DoS 的状况发生
也就是资源被占满的情况 (以这次的例子是 CPU)
这类型的问题可以被称为 ReDos [1]
是一种因为正规表示法 (RegEx) 撰写时的疏忽导致再比对时 耗尽 CPU 资源
经典的例子是 (a+)+ 这个表示法 当比对 aaaa! 时
会根据 a 的数量而比对次数成等比成长
原因在于当配失败时 会触发 backtrack 而继续比对
更多的比对资讯可以使用 Perl[2] 的 debug 工具
[0]: https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/
[1]: https://en.wikipedia.org/wiki/ReDoS
[2]: https://metacpan.org/pod/Regexp::Debugger
作者: st1009 (前端攻城师)   2019-07-13 22:54:00
好文推推

Links booklink

Contact Us: admin [ a t ] ucptt.com