您现在的位置是:首页 > 文章详情

Ruby 3.2.0 RC 1 发布,引入针对 ReDoS 的正则表达式改进

日期:2022-12-07点击:296

Ruby 3.2.0 RC 1 发布了,3.2.0 预览版引入基于 WASI 的 WebAssembly 支持和正则表达式超时退出机制3.2.0 RC 1 则引入两项可显著缓解 ReDoS 攻击的改进,以及一些语言功能和性能改进。

改进的正则表达式匹配算法

从 Ruby 3.2 开始,Regexp 的匹配算法通过使用记忆技术得到了极大的改进。

 # This match takes 10 sec. in Ruby 3.1, and 0.003 sec. in Ruby 3.2 /^a*b?a*$/ =~ "a" * 50000 + "x"

改进后的匹配算法使得大多数 Regexp 匹配(实验中大约为 90%)在线性时间内完成。

对于 3.2.0 预览版本的用户:此优化可能会消耗与每个匹配的输入长度成比例的内存。预计不会出现实际问题,因为此内存分配通常会延迟,并且正常的 Regexp 匹配最多应消耗 10 倍的内存输入长度。

该功能最初的提议是 https://bugs.ruby-lang.org/issues/19104

其他值得注意的新功能

语法建议

  • syntax_suggest(以前的 dead_end)的功能已集成到 Ruby 中,可以帮助找到错误的位置,例如丢失或多余的 end 。
 Unmatched `end', missing keyword (`do', `def`, `if`, etc.) ? 1 class Dog > 2 defbark > 4 end 5 end

[Feature #18159

错误高亮

  • 现在它指向 TypeError 和 ArgumentError 的相关参数
 test.rb:2:in `+': nil can't be coerced into Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^

语言

  • 匿名 rest 和关键字 rest 参数可以作为参数传递,而不仅仅是在方法参数中使用。
  def foo(*) bar(*) end def baz(**) quux(**) end

[Feature #18351]

 

更多性能改进和细节变化可在发布公告中查阅。

 

回顾一下 3.2.0  预览版中引入的功能:

基于 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

此项特性的最初提案:https://bugs.ruby-lang.org/issues/17837

 

原文链接:https://www.oschina.net/news/220964/ruby-3-2-0-rc-1-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章