如何在Perl脚本中设置污点模式?
#!/usr/bin/env perl
什么是 shebang?
#!/usr/bin/env PERL5OPT=-T perl
这对我来说似乎有些不合逻辑。
另一个选项是,如果您检测到脚本未开启污点模式,则重新在污点模式下执行该脚本:
#!/usr/bin/env perl
warn 'Taint mode is '.(${^TAINT} ? 'on' : 'off'); # For debugging
exec($^X,'-T',$0,@ARGV) unless ${^TAINT};
# do stuff under taint mode here
由于污点模式只能通过-T
标志启用,并且在shebang行中env
不接受任何标志,因此您最好通过perl -T script.pl
运行程序,而不是直接执行脚本。
如果您绝对需要在shebang中强制执行污点模式,则可以在PATH的某个位置(例如/usr/local/bin)创建一个具有以下内容的taintperl
脚本:
#!/bin/sh
/usr/bin/env perl -T
#!/usr/bin/env taintperl
#!
后面提到的程序是正确的。在这里,它是 /usr/bin/env
,已经编译过了。反过来,env
不关心 taintperl
是否是一个编译过的程序。 - maxelost
env
的位置是标准化的。 - daxim/usr/bin/env perl
是一个救星。 - mpeters