【问题标题】:Safely escape out String before EVAL()在 EVAL() 之前安全地逃出 String
【发布时间】:2022-01-24 18:42:09
【问题描述】:

所以我想做的如下

会有一个外部配置文件包含

RunCommand = "SomePHPCommand($SomeVariable)"

但是配置文件

$SomeVariable = GetFromWebCall();  //Obtained Externally, needs to be made safe

$PHPCommand = LoadFromConfig(RunCommand)  //Obtained externally but safe controlled environment.  No clean necessary

result = eval($PHPCommand)

简而言之,配置文件是安全的。但 $SomeVariable 可能包含恶意内容,我需要为此做好计划。

如何在运行我的 eval 命令之前安全地退出 $SomeVariable?

【问题讨论】:

  • eval 通常可以用更安全的东西代替。为什么必须从外部获取命令是否有特殊原因?难道你不能从外部获得一个可以“映射”到特定命令的关键字吗?你期待什么样的命令?
  • 没有清除变量的通用方法。没有办法分辨什么是恶意的,什么不是。
  • 在您的情况下什么是“安全”?
  • 如果你想要安全,你想要一个允许的白名单。如果您可以填写一些关于您期望 GetFromWebCall 提供哪些类型的用户输入的信息,我们可能会对如何安全地实施它有一些想法。

标签: php security code-injection


【解决方案1】:

没有使变量安全的通用方法。但您可以允许或禁止特定命令。

function isSafe($command){
    //checking for some Program execution Functions
    $isMalicious = preg_match("/(?:passthru\(.*\))|(?:exec\(.*\))|(?:system\(.?\))/",$command);
    if($isMalicious === 1){
        return false;
    }else{
        return true;
    }
}

在执行命令之前,您可以执行以下操作:

$safe = isSafe($PHPCommand);
if($safe){
    eval($PHPCommand);
}else{
    echo("Command not safe!");
}

所有程序执行函数here

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2023-03-13
    • 2019-12-06
    • 2016-12-27
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多