Ruby 3.2.0 Preview 1 veröffentlicht, Einführung des Timeout-Mechanismus für reguläre Ausdrücke

Ruby 3.2.0 Vorschau 1 wurde veröffentlicht. Diese Version fügt viele neue Funktionen sowie eine optimierte Leistung hinzu.

WASI-basierte WebAssembly-Unterstützung

Dies ist eine erste Portierung der WASI-basierten WebAssembly-Unterstützung. Diese Funktion ermöglicht die Verwendung von CRuby-Binärdateien in Webbrowsern, serverlosen Edge-Umgebungen und anderen WebAssembly/WASI-Embeddern. Derzeit besteht dieser Port die Tests der Basis- und Bootstrap-Testsuiten ohne Verwendung der Thread-API.

Timeout-Exit-Mechanismus für reguläre Ausdrücke

Diese Version führt einen Timeout-Exit-Mechanismus für reguläre Ausdrücke ein.

Regexp.timeout = 1.0

/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second

Da der Abgleich regulärer Ausdrücke viel Zeit in Anspruch nehmen kann, können Angreifer damit DoS-Angriffe (DoS für reguläre Ausdrücke oder ReDoS) ausführen, wenn Code versucht, einen ineffizienten regulären Ausdruck mit nicht vertrauenswürdigen Eingaben abzugleichen.

Regexp.timeoutEntsprechend den Anforderungen der Ruby-Anwendung konfiguriert, kann das DoS-Risiko verhindert oder deutlich reduziert werden. Bitte beachten Sie, dass es Regexp.timeoutsich um ein globales Konfigurationselement handelt. Wenn Sie unterschiedliche Timeout-Einstellungen für einige spezielle reguläre Ausdrücke verwenden möchten, müssen Sie timeoutSchlüsselwörter verwenden Regexp.new.

Regexp.timeout = 1.0

# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)

long_time_re =~ "a" * 50000 + "x" # never interrupted

Ursprünglicher Vorschlag für dieses Feature: https://bugs.ruby-lang.org/issues/17837

Andere Aktualisierungen umfassen die Optimierung der Leistung, die Aktualisierung der Standardbibliothek usw. Einzelheiten finden Sie in der Release-Ankündigung .

Ich denke du magst

Origin www.oschina.net/news/189866/ruby-3-2-0-preview1-released
Empfohlen
Rangfolge