Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 筛选/屏蔽perl脚本中作为参数传递的参数之一_Regex_Perl - Fatal编程技术网

Regex 筛选/屏蔽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

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

在其中一个例子中,我得到了密码作为输入。此密码将按其在日志文件中的方式记录。这就是我试图避免的情况

  • 我想屏蔽密码参数,然后登录,或者
  • 完全忽略此条目
  • 示例代码是:

    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'
        ];
    
    这里有几件事:

  • 我无法覆盖传递的输入参数,因为我将在下一步处理中需要密码值
  • 每当输入中存在密码参数时,输入参数a将始终具有值“getData”
  • 对于输入参数a的不同值,将没有密码字段
  • 参数的顺序有时可能会有所不同

  • 您可以在执行任何其他操作之前从
    @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
    参数吗?这将不起作用,因为密码字段被覆盖。如果我想在下一步中使用,我不能使用,因为原始值现在被***替换。