« Tüm yayınlar

Rejit: ReDoS'a Karşı Bağışık, Saf Python Regex Motoru

Rejit, Pike VM tabanlı, saf Python regex motoru; doğrusal zaman garantisiyle ReDoS saldırılarını tamamen imkansız kılıyor. MIT lisanslı.

Rejit, sıfırdan yazılmış ve doğrusal zaman garantisi sunan, saf Python ile geliştirilmiş bir regex motoru. Python'ın re modülünün kullandığı backtracking yaklaşımı yerine, deseni küçük bir bayt koduna derleyip ortaya çıkan NFA'yı bir Pike VM olarak genişlik öncelikli şekilde simüle ediyor; her durum, girdideki her pozisyonda en fazla bir kez ziyaret ediliyor. Klasik felaket senaryosu (a+)+$ deseninde re'nin çalışma süresi üstel olarak patlarken, rejit 40.000 karakterlik girdilerde bile birkaç yüz milisaniyede sabit kalıyor.

Doğruluk, oracle olarak Python'ın kendi re modülü kullanılarak test ediliyor: bir fuzzer, on binlerce rastgele desen ve dize üretip fullmatch, search, span/capture ve finditer semantiklerinde iki motorun uyuşup uyuşmadığını kontrol ediyor; 90.000'den fazla vakada sıfır uyuşmazlık bulunmuş. re'nin kendisinin takıldığı desenler oracle karşılaştırmasından hariç tutulup deterministik doğrusal-zaman testleriyle kapsanıyor.

Bunun bedeli ifade gücü: rejit yalnızca düzenli dil yapılarını destekliyor (backreference yok, lookaround yok, adlandırılmış gruplar veya inline bayraklar yok) ve re.ASCII ile eşdeğer ASCII sınıf semantiği kullanıyor. Python 3.10+ hedefliyor, hiçbir bağımlılığı yok ve MIT lisanslı — güvenilmeyen regex girdisiyle uğraşan mühendisler için pratik bir referans.