Ruby 3.2.0 RC 1 发布,引入针对 ReDoS 的正则表达式改进
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
错误高亮
- 现在它指向 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
更多性能改进和细节变化可在发布公告中查阅。
回顾一下 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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
FileZilla Server 1.6.0 发布,开源 FTP 服务器
FileZilla Server 是一个免费开源的 FTP 和 FTPS 服务器,能够提供与服务器的安全加密连接。Filezilla Server 没有实现对 SFTP(SSH 文件传输协议)的支持。 FileZilla Server 1.6.0 现已发布,更新内容如下: 新的功能: UI:现在可以使用协议配置的安全页面中的特定选择器,直接从 UI 将 TLS 证书上传到服务器。 UI:所有文本控件中的最大字符数已限制为合理的数字,以避免在极端情况下出现潜在的崩溃或停顿。 错误修正和小改动: 修复了管理协议中锁定 mutexes 的潜在问题 MSW:如果先前安装的卸载程序已被删除,安装程序现在也可以正常工作。 修复了处理 TLS close_notify 警报时网络代码中的问题。 更多详情可查看:https://filezilla-project.org/
- 下一篇
Blender 3.4 发布
Blender 是一个免费和开源的 3D 计算机图形软件工具集,用于创建动画电影、视觉效果、艺术、3D 打印模型、交互式 3D 应用、VR 和计算机游戏。Blender 3.4 现已正式发布,该版本包括 Cycles 中的路径引导、新的雕刻和 paint masking 工具、几何节点视口叠加、新的 UV 编辑工具、改进的性能等等。 具体一些更新亮点包括: 除了 Linux 上现有的 X11 支持之外,现在还启用了 Wayland 支持。 通过使用英特尔的 Open Path Guiding 库集成了路径引导支持,以提高采样质量。Open path Guiding 库目前仅适用于基于 CPU 的渲染。 现在支持带有 HIP 的 AMD Radeon RX 7000 系列 (RDNA3) 显卡。 修复了在 Linux 上使用 ROCm 5.3 及更新版本时 Vega 和 RDNA1 显卡的 texture issues。 FreeType 字体缓存以使用更少的资源和更好的性能。 WebP 图像缩略图生成更快,同时使用更少的 RAM。 Blender 的视频渲染现在支持 FFmpeg AV...
相关文章
文章评论
共有0条评论来说两句吧...