0

我目前正在重写 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

4

1 回答 1

0

好的,现在这是它变得尴尬的部分......

事实证明,这个脚本多次包含相同的代码并多次执行它......

所以上面发布的代码实际上可以工作并且不会返回任何错误(就像它应该的那样)。错误消息是由下一次出现尚未修补的代码引起的。

tl;博士:我可能应该丢弃该脚本并从头开始重写它。

于 2014-05-10T17:37:24.183 回答