php中的class和call_user_func()函数之间有什么关系?

时间:2017-09-10 21:18:12

标签: php function

我正在学习php.net的PHP中的OOP,但在that page的第三个注释中,我发现了一个奇怪的事情,即如果使用类名,例如在call_user_func()中,它可以包含一些危险的字符,如../

根据我的经验 call_user_func()用于调用第一个参数中提供的回调。但是 call_user_func()函数中类名的概念或关系是什么,我感到困惑。

有谁能告诉我这个场景?

1 个答案:

答案 0 :(得分:0)

警告必须很旧。类名中的大多数(全部?)危险字符导致__autoload未被调用。至少从PHP 5.4.x / 5.5.x开始。但在此之前它曾经是一个问题。考虑以下自动加载器:

spl_autoload_register(function ($class_name) {
  eval('class '.$class_name.' {}');
}); 

显然它本身就是愚蠢的,但因为它只是为了示范。将它与同样愚蠢的电话结合起来:

call_user_func(array($user_input,'function'));

如果$user_input实际上来自邪恶的用户,或者类似于:

$user_input = 'dummy {}echo"hi";//';

你有一个PHP 5.3.x的RCE。但我承认犯了很多错误。

3v4al Link感兴趣的人。如果您想尝试一些变化,请检查eol versions