繁体   English   中英

将命令行 arguments 隐藏到 Perl 脚本

[英]Hiding command-line arguments to a Perl script

假设我编写了一个名为“foo.pl”的 Perl 脚本,它通过-p开关接收密码参数。

但是,在它运行时,任何人都可以执行ps并查看整个命令行字符串,包括密码:

$ ps a |grep 'foo\.pl'
32310 pts/4    S+     0:00 /usr/bin/perl -w ./foo.pl -p password
32313 pts/5    S+     0:00 grep foo.pl

隐藏密码并将其替换为xxxxxx之类的最简单/最简单的方法是什么?

从脚本内部询问密码,因此您不必将其作为参数传递。


更新

显然这对我有用,模拟mysql行为:

#!/usr/bin/perl
($0 = "$0 @ARGV") =~ s/--password=\K\S+/x/;
<STDIN>;

$ ./s --user=me --password=secret
^Z
$ ps
  PID TTY           TIME CMD
 1637 ttys000    0:00.12 -bash
 2013 ttys000    0:00.00 ./s --user=me --password=x

在 MacOS 10.6 下

如前所述,在命令行上传递密码并不是一个好主意。

但是:您通常可以(它取决于操作系统)通过分配给$0来更改ps显示的名称。

例如(在 Linux 上测试)

$ cat secret.pl
#!/usr/bin/perl

$0 = "my secret perl script";
sleep 15;

$ ./secret.pl -p foobar &
[2] 426
$ ps a | grep perl
  426 pts/0    S      0:00 my secret perl script
  428 pts/0    S+     0:00 grep perl

有关详细信息,请参阅perlvar联机帮助页中有关$0的部分。

go 有几种方法。 最直接的方法是(如 sidyll 所说)在实际脚本中提示输入密码。 不要在命令行中输入,也不必隐藏它。

另一种选择是私人密码文件 该文件可以通过 shell 插值读取,但它仍然是一种杂物。

您可以通过将脚本包装在“启动器”脚本中来为私有密码文件增加一点灵活性。 本质上,您编写了一个脚本,其唯一目的是“设置”密码文件,然后启动您的真实脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM