【问题标题】:How can I execute an environment variable as code?如何将环境变量作为代码执行?
【发布时间】:2014-12-22 22:08:38
【问题描述】:

我有以下使用环境变量 $X 的 Perl 代码:

printf("%s", substr($ENV{X}, 4));

在不更改 Perl 代码的情况下,我可以将 $X 设置为什么,以便 Perl 在 printf 返回之前以状态 1 退出?我认为${\(exit 1)} 会起作用,但显然我不明白 Perl 如何读取环境变量。

【问题讨论】:

  • 在字符串中执行代码的唯一方法是使用eval()
  • 字符串插值仅在编译源代码时发生。 (eval 算作编译源)。已经编码的字符串不需要插值。幸运的是,Perl 不易受到您正在寻找的类似“Shellshock”的漏洞的影响。
  • @tjd:不,字符串插值发生在运行时。

标签: perl environment-variables


【解决方案1】:

你无能为力。只是尝试获取数据时将数据作为 Perl 代码执行?那会很糟糕。

${\(exit 1)} 是一个调用exit 的表达式。 $ENV{X} 是一个返回字符串的表达式(env var X 的值)。

您需要将$ENV{X} 的内容作为 Perl 代码传递给 Perl 解析器。可以在 Perl 中使用以下方法将 Perl 代码传递给解析器:

  • eval EXPR(包括s///ee
  • do PATH
  • require PATH
  • require Module
  • use Module
  • no Module

perl之外,你可以使用

  • perl PATH
  • perl <PATH
  • perl -e EXPR
  • perl -E EXPR
  • perl -MModule
  • perl -mModule

此外,命令行选项可以通过PERL5OPT 传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2020-10-31
    • 2012-02-03
    相关资源
    最近更新 更多