PHP 允许您从变量或数组条目中实例化类,如下所示:
class Foo {}
$className = 'Foo';
new $className();
$someArray = ['class_name' => 'Foo'];
new $someArray['class_name']();
令人沮丧的是,我的一些同事——在我在多家公司从事的多个项目中——使用了这种语言特性和用户输入提供的类名,作为根据请求中指定的类型实例化几个可能的子类之一的方法。我已经看到了这些方面的代码......
new $_GET['product_type']($_GET['product_id']);
除了令人头疼的维护之外,这显然是愚蠢和危险的;你让攻击者实例化一个任意类。但有多危险?有哪些攻击只使用内置的 PHP 类(因此不需要应用程序代码的详细知识),可以针对上述端点使用?
我正在寻找任何人都能想出的最恶劣的攻击,我可以用它来吓唬任何使用这种可怕反模式的未来同事。