gpt4 book ai didi

regex -/abcd^$/i 是否匹配 Perl 中的任何内容?

转载 作者:行者123 更新时间:2023-12-01 07:12:13 24 4
gpt4 key购买 nike

Perl 是我从未有充分理由涉足的事情之一。不幸的是,我有一段非常具体的(对我来说像是一个错误)的 Perl 代码,我需要定义它的可证明的操作。

此代码已编写并已投入生产,我希望将其删除。

我相信成功匹配是不可能的,但这是对这个主题(尤其是我的)的猜测还不够好的事情之一。它正在守护一个代码块{}不幸的是,它有多个条件,因此无论此表达式的状态如何都可以输入,但是如果确实发生这种情况,则会出现安全问题(如果状态未定义恕我直言,则本身就是一个错误,但没有证明影响/严重性较低(读取永远不会得到修复))。

有没有可能 /abcd^$/i 永远,匹配成功?包括空字节插入或任何可能的字节/二进制数据?我什至会进行一些疯狂的环境攻击(例如,在 1 字节内消耗主机上的所有内存,导致 Perl 表达式评估器在运行时无法进行未经检查的 2 字节分配)。为创意点赞。

最佳答案

从 perlre 联机帮助页:

You may, however, wish to treat a string as a multi-line buffer, such that the "^" will match after any newline within the string (except if the newline is the last character in the string), and "$" will match before any newline. At the cost of a little more overhead, you can do this by using the /m modifier on the pattern match operator. (Older programs did this by setting $*, but this practice has been removed in perl 5.9.)



因此,请确保 $* 或其他预定义变量不会干扰。

也就是说,即使是像/abcd^$/im 这样的 $* 修改表达式(注意添加的“m”标志)也不会匹配任何内容,因为“^”字符仅在换行符之后匹配。

另外,确保正则表达式没有过载。如果导入的包执行以下操作:
use overload;                                                                   
sub import {
overload::constant(qr => sub { $_ = shift; s/^abcd//; $_ });
}

然后空字符串将匹配您的正则表达式。

另外,不知道正则表达式是否出现在您的代码中,它可能不相关,但为了安全起见,您不应该隐式匹配 $_ 而是明确指定变量:“$str =~/abcd^$/i;"。

$_ 是动态作用域的,所以如果你有任何函数调用可能会在你定义它的位置和正则表达式所在的位置之间修改 $_ ,或者如果你稍后添加它们,你会感到惊讶:)

关于regex -/abcd^$/i 是否匹配 Perl 中的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com