Perl编程中的安全技术与实践
1. 符号引用
符号引用是指将标量的值用作变量名。例如:
my $name = 'Amelia';
$$name = 'Camel'; # 设置 $Amelia 的值
这里尝试对 $name 进行解引用,由于它不是引用,Perl 会将其值 Amelia 作为要赋值的变量名。
符号引用可用于任何数据类型,包括子程序名和方法名:
my $sub_name = time % 2 ? 'make_camel' : 'make_llama';
&$sub_name( @arguments );
my $method = time % 2 ? 'make_camel' : 'make_llama';
$object->$method( @arguments );
虽然这在动态语言中很有用,但也很危险。如果从用户数据中获取子程序或方法名,可能会让用户执行未预料的操作。例如下面的简单解释器程序:
# repl.pl
use v5.10;
use POSIX;
use Cwd qw(getcwd);
say "Cwd is ", getcwd();
REPL: {
print ">>> ";
my $_ = <>;
last REPL if /quit
超级会员免费看
订阅专栏 解锁全文
606

被折叠的 条评论
为什么被折叠?



