我目前正在重写 OTRS 票务系统中使用的一些自定义 perl 代码,用于创建类似 SQL 的查询。是的,可能有更好的方法来逃避输入,但我们不要进入这个......
$Param{PostMasterSearch}
包含一个电子邮件地址,例如test'test@domain.tld
(注意'
)。
my $PostMasterSearch = $Param{PostMasterSearch};
$PostMasterSearch =~ s/'//gms;
$Self->{LogObject}->Log(
Priority => 'error',
Message => "XXXXX: $PostMasterSearch",
);
$SQLExt .= " $Field LIKE '$PostMasterSearch'";
所以我的期望是,我会找到一条日志消息XXXXX: testtest@domain.tld
和 SQL 查询的一部分,类似于Email LIKE 'testtest@domain.tld'
.
但实际上,我只得到日志消息 - SQL 查询字符串是出于某种原因Email LIKE 'test'test@domain.tld'
。
拧紧代码的最后一行,就像
$SQLExt .= " $Field LIKE '$PostMasterSearch' X";
没有任何意义 - 但返回字符串Email LIKE 'testtest@domain.tld' X
。
关于为什么$PostMasterSearch
仍然包含'
应该早已不复存在的任何提示?或有关如何将$SQLExt
与'
-less 版本连接起来的提示$PostMasterSearch
?