本代码中的eval()如何不安全?

Ten*_*eno 3 php security wordpress eval

我正在使用下面的代码自动加载和声明类,这样我只需要将类文件放在名为classes的文件夹中.spl_autoload_regsister()中的部分可能对您来说似乎没必要,但它需要作为WordPress插件工作而不会出错.

它使用eval()和我看到很多网页谈论使用eval()是坏的,可以创建一个安全漏洞.那怎么会有危险呢?

$strDirPath = dirname(__FILE__) . '\\classes\\';
$arrClassFiles = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($strDirPath . '*.php'));
spl_autoload_register(
    create_function('$class_name', '
        global $arrClassFiles, $strDirPath;
        if (in_array($class_name, $arrClassFiles)) 
            include($strDirPath . $class_name . ".php");' )
);

foreach ($arrClassFiles as $strClassName) {
    $strClassName_alpha = $strClassName . "_Alpha";
    eval("class $strClassName_alpha extends $strClassName {};");    
}

print_r(get_declared_classes());    
Run Code Online (Sandbox Code Playgroud)

也许,有人可以在文件夹中放入php代码的文件名?但我认为它不会影响系统.

Ivo*_*Ivo 6

如果他们可以为类文件命名randomclass {}; echo $db_password;//.php,那么您可能会遇到代码执行攻击.

我很确定这不是一个有效的文件名,但有人在制作有效的恶意输入方面比我更有意思.

它通常不是你需要打开自己的攻击面,因为它实际上总是可以避免更好的代码结构.

  • `ls -al` =>`-rw-rw-r-- 1 matthew matthew 0 Sep 3 21:41 randomclass {}; echo $ db_password;#.php`. (2认同)