Regex 筛选/屏蔽perl脚本中作为参数传递的参数之一
我有一个perl脚本,它接受一组参数作为输入。根据输入执行不同的业务逻辑集 在其中一个例子中,我得到了密码作为输入。此密码将按其在日志文件中的方式记录。这就是我试图避免的情况Regex 筛选/屏蔽perl脚本中作为参数传递的参数之一,regex,perl,Regex,Perl,我有一个perl脚本,它接受一组参数作为输入。根据输入执行不同的业务逻辑集 在其中一个例子中,我得到了密码作为输入。此密码将按其在日志文件中的方式记录。这就是我试图避免的情况 我想屏蔽密码参数,然后登录,或者 完全忽略此条目 示例代码是: use strict; use warnings; use Data::Dumper qw(Dumper); print Dumper \@ARGV; 现在,假设我将上述脚本称为: test.pl -a='getData' -b='abc' -passwo
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'
];
这里有几件事:
您可以在执行任何其他操作之前从
@ARGV
复制密码字段,然后将该副本屏蔽以用于日志记录@ARGV
将包含原始未屏蔽版本
use warnings;
use strict;
my ($masked_pw) = grep /-password=.*/, @ARGV;
if ($masked_pw){
my $mask = '*****';
$masked_pw =~ s/(-password=).*/$1$mask/;
}
我和@ThisSuitisBlack在一起但不是。。。密码在其他地方仍然可用。只需迭代参数,如果密钥是
-password
,则不打印它?是否有其他方法可以做到这一点,我试图避免迭代部分,以防-password根本不存在。至少在*nix上,密码将存储在用户的历史文件中,并显示在进程表中,无论您在脚本中执行什么操作。在应用程序日志中屏蔽密码可能会有所帮助,但这肯定不会使脚本安全。这里没有具体问题。听起来您必须编写一个需要密码输入的程序,并且希望它更安全。您不能让某人在命令行中输入文本字符串,并使其仅对软件的某些部分可见:整个命令行将在您的程序看到之前被记录。听起来您需要忘记命令行和手动控制,以获得访问密码的安全方法。程序需要的是对该资源的访问,而不是密码本身。嗯,通过命令行传递密码从来都不安全。不要这样做期间…我同意它不会是100%安全,但我的目的是确保它不会得到日志。其余部分将由团队的不同部分负责。让我试试屏蔽的方法,看看它是否有效。当密码字段甚至不作为输入出现时,这种情况也会失败。如何确保像那样的极端情况也得到解决?你说它会失败是什么意思?什么也不会发生。如果-password=
不存在,则不会显示任何错误或警告,只是不会发生任何事情。您的意思是希望脚本告诉用户需要-password
参数吗?这将不起作用,因为密码字段被覆盖。如果我想在下一步中使用,我不能使用,因为原始值现在被***替换。