Na początku lipca pisałem o awarii usługi Cloudflare, przez co spora część internetu (strony WWW) przestała działać. Wspomniałem wtedy też, że ekipa z Cloudflare zapowiedziała, że niebawem napisze coś więcej na temat samego incydentu. I jak zapowiedzieli, tak zrobili…

Wyrażenie regularne, które zatrzymało Cloudflare i spory kawał(ek) internetu

Od pierwszych informacji na temat usterki była wiadomo, że przyczyną było wdrożenie błędnego wyrażenia regularnego (RegEx) w regułach WAF (Web Application Firewall), co spowodowało natychmiastowe obciążenie procesorów maszyn obsługujących usługę.

Wg informacji z bloga Cloudflare całe wyrażenie regularne wygląda tak:

?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*)))

Z czego problematyczny fragment, który został dodany to niepozorne:

.*(?:.*=.*)

Te kilka niepozornych znaków pokazuje świetnie potęgę wyrażeń regularnych. Tylko tyle wystarczyło, by internet wstrzymał oddech.

Nie będę nawet usiłował wyjaśniać wyrażenia regularnego, zasady działania itp., bo choć zdarza mi się korzystać, to jest to tylko tyle, ile muszę. Choć wtedy często wpadam na szalony pomysł, by poświęcić trochę czasu i z wyrażeniami regularnymi zapoznać się dogłębnie. Na szczęście szybko wraca rozsądek i temat zostawiam… ;-)

(!) Zgłoś błąd na stronie