这个 php 函数安全吗
Is this php function safe
这不是我的完整代码。我只是发布相关部分。在我当前的应用程序中,用户无权操作变量,因此它是安全的,但将来我可能会在他们可以的地方写一些东西,所以当我考虑它时,我想问问是否有破解这段代码的方法。
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 就能做到这一点的方法,我很想知道,因为我不喜欢使用 eval。
你不应该为此使用 eval
。
而是简单地称呼你这样的函数
$functionName($fields);
如果这些功能更符合您的需要,您也可以使用其中一种功能:call_user_func() or call_user_func_array()
这不是我的完整代码。我只是发布相关部分。在我当前的应用程序中,用户无权操作变量,因此它是安全的,但将来我可能会在他们可以的地方写一些东西,所以当我考虑它时,我想问问是否有破解这段代码的方法。
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 就能做到这一点的方法,我很想知道,因为我不喜欢使用 eval。
你不应该为此使用 eval
。
而是简单地称呼你这样的函数
$functionName($fields);
如果这些功能更符合您的需要,您也可以使用其中一种功能:call_user_func() or call_user_func_array()