Enjin Regex Rust Memperoleh Sokongan Lookbehind Masa Linear, Menghapuskan Kerentanan DoS

Pasukan Komuniti BigGo
Enjin Regex Rust Memperoleh Sokongan Lookbehind Masa Linear, Menghapuskan Kerentanan DoS

Penyelidik telah berjaya melaksanakan penegasan lookbehind dalam enjin regex Rust sambil mengekalkan jaminan prestasi masa linear yang penting. Kejayaan ini menangani batasan lama yang memaksa pembangun memilih antara ciri regex canggih dan perlindungan terhadap serangan denial-of-service.

Crate regex Rust sentiasa mengutamakan keselamatan berbanding ciri, dengan sengaja mengecualikan sokongan lookbehind untuk mengekalkan jaminan pelaksanaan masa linear. Pilihan reka bentuk ini menghalang senario backtracking bencana yang boleh menjatuhkan keseluruhan perkhidmatan, seperti yang terkenal berlaku dengan gangguan Cloudflare pada 2019. Walau bagaimanapun, ia juga mengecewakan pembangun yang memerlukan alat pemadanan corak berkuasa ini untuk tugas pemprosesan teks yang kompleks.

Memecahkan Halangan Prestasi

Pelaksanaan baru menggunakan teknik automaton terhingga yang inovatif untuk menyokong lookbehind tanpa had tanpa mengorbankan jaminan prestasi enjin. Tidak seperti enjin regex tradisional yang boleh menunjukkan kerumitan masa eksponen dengan corak tertentu, pendekatan ini memastikan bahawa masa pelaksanaan kekal berkadar dengan panjang input tanpa mengira kerumitan corak.

Kemajuan ini amat penting untuk aplikasi yang memproses input yang tidak dipercayai. Pelayan web, penganalisis log, dan alat keselamatan kini boleh menggunakan corak regex yang canggih tanpa takut dikuasai oleh rentetan yang direka hasut untuk mencetuskan backtracking berlebihan.

Automaton terhingga: Model matematik yang digunakan dalam sains komputer untuk mengenali corak dalam teks, terdiri daripada keadaan dan peralihan antara mereka.

Perbandingan Prestasi:

  • Enjin backtracking tradisional: Boleh menunjukkan kerumitan masa eksponen O(2^n)
  • Rust regex dengan jaminan masa linear: Masa pelaksanaan O(n) tanpa mengira kerumitan corak
  • Penanda aras Snort-2 dan Snort-3: Enjin linear berprestasi 70-80x lebih pantas daripada modul re Python
  • Penanda aras umum: Python re biasanya 2-5x lebih pantas dalam kes bukan patologi

Respons Komuniti dan Penggunaan

Pembangunan ini telah menjana keseronokan yang besar dalam komuniti Rust , dengan ramai pembangun menyatakan kelegaan kerana akhirnya mempunyai akses kepada fungsi lookbehind. Ciri ini menangani batasan praktikal yang telah lama memaksa penyelesaian sementara atau alternatif dalam aplikasi dunia sebenar.

Dari perspektif pengguna, ini amat berharga. Sungguh satu penambahbaikan yang menakjubkan; terutamanya yang tanpa had. Saya berharap ini akan masuk ke dalam RE2 dan go yang sebenar.

Pelaksanaan ini melangkaui Rust itu sendiri, berpotensi memberi manfaat kepada ekosistem alat yang lebih luas yang dibina atas crate regex. Aplikasi popular seperti ripgrep dan Visual Studio Code , yang bergantung pada enjin ini untuk pencarian teks, boleh mewarisi penambahbaikan ini sebaik sahaja perubahan diintegrasikan ke dalam keluaran stabil.

Impak Ekosistem:

  • ripgrep: Alat carian teks yang menggunakan enjin regex Rust
  • Visual Studio Code: Menggunakan ripgrep untuk fungsi carian teks
  • RE2 Engine: Enjin regex Google dengan matlamat prestasi yang serupa
  • Bahasa Go: Menggunakan enjin RE2, berpotensi mendapat manfaat daripada teknik yang serupa

Batasan Teknikal dan Pertukaran

Walaupun sokongan lookbehind baru mewakili langkah besar ke hadapan, ia datang dengan kekangan tertentu. Pelaksanaan tidak menyokong kumpulan tangkapan dalam ungkapan lookbehind, yang mengehadkan beberapa kes penggunaan canggih. Walau bagaimanapun, penyelidik menyatakan bahawa senario sedemikian agak jarang berlaku dalam amalan dan sering menunjukkan reka bentuk regex yang tidak optimum.

Kerja ini dibina atas kemajuan teori terkini dalam teori automaton, menunjukkan bagaimana penyelidikan akademik boleh menyelesaikan cabaran kejuruteraan praktikal. Jaminan masa linear kekal sebagai ciri yang menentukan enjin, memastikan prestasi kekal boleh diramal walaupun kerumitan corak meningkat.

Had Ciri:

  • Ungkapan lookbehind tidak boleh mengandungi kumpulan tangkapan
  • Sokongan lookbehind tanpa had (peningkatan besar berbanding keperluan panjang terhad PCRE2 )
  • Mengekalkan jaminan pelaksanaan masa linear
  • Serasi dengan API crate regex Rust yang sedia ada

Implikasi Masa Depan

Pembangunan ini boleh mempengaruhi pelaksanaan regex lain, terutamanya enjin RE2 Google yang berkongsi matlamat reka bentuk yang serupa. Teknik yang dibangunkan untuk crate regex Rust mungkin menyediakan peta jalan untuk menambah ciri canggih kepada enjin regex berfokuskan prestasi lain tanpa menjejaskan jaminan keselamatan mereka.

Kejayaan pelaksanaan ini membuktikan bahawa pertukaran tradisional antara ciri regex dan jaminan prestasi bukanlah mutlak. Apabila teknik ini matang dan merebak ke enjin lain, pembangun mungkin tidak lagi perlu memilih antara pemadanan corak yang berkuasa dan kebolehpercayaan sistem.

Rujukan: Backtracking NFA