过滤/掩码在perl脚本

时间:2016-05-18 21:05:26

标签: regex perl

我有一个perl脚本,它接受一堆参数作为输入。根据输入,执行不同的业务逻辑集。

在其中一个案例中,我将密码作为输入。此密码将记录在日志文件中。这是我想避免的情况。

  1. 我要屏蔽密码参数,然后记录OR
  2. 完全忽略此条目。
  3. 示例代码为:

    use strict;
    use warnings;
    use Data::Dumper qw(Dumper);
    
    print Dumper \@ARGV;
    

    现在让我说我将上述脚本称为:

    test.pl -a='getData' -b='abc' -password='xyz' -c='pqr'
    

    现在输出如下:

    $VAR1 = [
          '-a=getData',
          '-b=abc',
          '-password=xyz',
          '-c=pqr'
        ];
    

    所以不是记录密码,而是(从安全角度来看)我想屏蔽字段。输出如下所示:

     $VAR1 = [
          '-a=getData',
          '-b=abc',
          '-password=*******',
          '-c=pqr'
        ];
    

    这里几件事:

    1. 我无法覆盖传递的输入args,因为我将在下一步处理中需要密码值
    2. 只要输入中存在密码参数,
    3. 输入参数 a 将始终具有值'getData'
    4. 对于输入参数 a 的不同值,将不会有密码字段。
    5. 参数顺序可能会有所不同

1 个答案:

答案 0 :(得分:0)

您可以在执行任何其他操作之前从@ARGV复制密码字段,然后屏蔽该副本以用于记录。 @ARGV将包含原始的未屏蔽版本。

use warnings;
use strict;

my ($masked_pw) = grep /-password=.*/, @ARGV;

if ($masked_pw){
    my $mask = '*****';
    $masked_pw =~ s/(-password=).*/$1$mask/;
}

我和@ThisSuitIsBlack虽然......但密码仍可在其他地方使用。