这个正则表达式在 ruby 上下文中安全吗?

Is this regex safe in ruby context?

提问人:Sim 提问时间:7/4/2023 更新时间:7/4/2023 访问量:78

问:

请问这个正则表达式值在 ruby 语言的上下文中是否安全,不受极端值的影响?

a = b.match(%r{(.*)/(.*)})

我的意思是不可能回溯,对吧?

我尝试对这个值进行基准测试,但我相信使用它是可以的。

aaaaaaaaaaaaaaa/aaaaaaaaaaaaaaa
正则表达式 Ruby

评论

5赞 InSync 7/5/2023
为什么你认为没有回溯?第一个匹配任何内容,包括 ,因此它将首先匹配所有可能的内容,然后逐个放弃一个字符,直到出现 a。你只想检查字符串中间是否有 / 吗?或者你想把字符串拆分为最后一个 /.*//
2赞 Stefan 7/5/2023
你能说得更具体一点吗?您认为什么是“极值”?您的意见从何而来?你的正则表达式的目的是什么?
0赞 Sim 7/5/2023
我的意思是“额外值”,即那些可能产生 ReDoS @Stefan 的值
1赞 Todd A. Jacobs 7/5/2023
为什么不呢?甚至只是 ?似乎是一个贪婪的捕获正则表达式,没有用处。无论当前代码是否触发了某些条件,它仍然是在单个字符上拆分字符串的次优方法。您甚至可以使用不带正则表达式的 String 方法并获得类似的结果。part1, _, part2 = b.partition "/"part1, part2 = b.split "/"
1赞 markalex 7/6/2023
我手头没有 Ruby(也没有新的 Ruby 知识)。但这是 Python 中非常小的测试。它始终显示正则表达式方式的时间增加了 50%(对于更大的数组也是如此)。这对你来说不够理想吗?另外,如果您打算保留此讨论,请随时将其移至聊天室。

答: 暂无答案