这个PHP功能安全吗?

时间:2015-09-08 11:25:17

标签: php eval unsafe

这不是我的完整代码。我只是发布相关部分。在我当前的应用程序中,用户无权操作变量,因此它是安全的,但将来我可以写一些他们可以这样做的东西,所以当我在思考它时,我想问是否有任何方法来破解这段代码。

define('SMART_TAG_FOLDER','includes/smartTag/');
function loadExternalFunction($functionName,$fields) {
    //get file function should reside in
    $fileName=$functionName;
    $fileEnd=strpos($functionName,'_');
    if ($fileEnd!==false) {
        $fileName=substr($fileName,0,$fileEnd);
    }
    $fileName.='.php';

    //try to load file function should be in
    if (file_exists(SMART_TAG_FOLDER . $fileName)) {
        require_once SMART_TAG_FOLDER . $fileName;
    }

    //if desired function exist then execute
    $functionName='smartTag_'.$functionName;

    if (function_exists($functionName)) {

        //run function
        $evalRun='$value=' . $functionName . '($fields);';
        eval($evalRun);
        return $value;
    }
    return false;
}

我的想法是使用file_exists和function_exists以及向用户定义的变量$ function添加信息它应该是安全的。

如果有人知道如何在没有评估的情况下做到这一点,我很乐意知道,因为我不喜欢使用eval。

1 个答案:

答案 0 :(得分:3)

你不应该使用eval

而是简单地称你为“

$functionName($fields);

如果符合您的需求,您还可以使用其中一项功能:call_user_func()call_user_func_array()