Ruby 3.2.0 Preview 1 釋出,引入正規表示式超時退出機制

2022-04-06 09:00:41

Ruby 3.2.0 Preview 1 已釋出。此版本增加了許多新特性,以及優化效能。

基於 WASI 的 WebAssembly 支援

這是基於 WASI 的 WebAssembly 支援的初始移植。此項特性使得 CRuby 二進位制檔案可在 Web 瀏覽器、Serverless Edge 環境和其他 WebAssembly/WASI 嵌入器上使用。目前,此移植可在不使用 Thread API 的前提下通過基本和引導測試套件的測試。

正規表示式超時退出機制

此版本引入了正規表示式超時退出機制。

Regexp.timeout = 1.0

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

由於正規表示式匹配會耗費不少時間,當程式碼試圖向不受信任的輸入匹配低效的正規表示式時,攻擊者可能會利用它進行 DoS 攻擊(即正規表示式 DoS,或稱作 ReDoS)。

Regexp.timeout根據 Ruby 應用程式的要求進行設定,可以防止或顯著降低 DoS 的風險。請注意,Regexp.timeout是全域性設定項,如果希望對某些特殊的正規表示式使用不同的超時設定,需要使用timeout關鍵字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

此項特性的最初提案:

其他更新內容包括優化效能,更新標準庫等,。

展開閱讀全文