我正在学习php.net的PHP中的OOP,但在that page的第三个注释中,我发现了一个奇怪的事情,即如果使用类名,例如在call_user_func()中,它可以包含一些危险的字符,如../。
根据我的经验 call_user_func()用于调用第一个参数中提供的回调。但是 call_user_func()函数中类名的概念或关系是什么,我感到困惑。
有谁能告诉我这个场景?
答案 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
。