动态调用PHP类方法

动态调用PHP类方法,php,security,Php,Security,从用户输入动态调用类中的方法是否存在任何安全问题。例如: <?php class A { public function foo() { return true; } } $obj = new A(); $method = $_GET['method']; $obj->$method(); 我知道用户可以在一个应用程序中调用任何方法,我对此很满意。我只是好奇是否还有其他可能的安全问

从用户输入动态调用类中的方法是否存在任何安全问题。例如:

<?php
    class A {
        public function foo() {
            return true;
        }
    }

    $obj = new A();

    $method = $_GET['method'];

    $obj->$method();

我知道用户可以在一个应用程序中调用任何方法,我对此很满意。我只是好奇是否还有其他可能的安全问题。

您的用户将能够尝试从类中调用任何可能的方法,甚至尝试调用不存在的方法并得到致命错误。 如果你同意的话。。。嗯,我想这没关系

它看起来不太好,但我认为不能注入任何其他类型的代码


不过,我至少会检查该方法是否存在-使用

是的,这可能是个坏主意,也许你应该限制允许的方法。如果$method不在此白名单中,可以在数组中定义允许的方法,然后抛出异常


您还需要使用magic u call$name,$args方法来允许调用这些用户定义的方法。

如果您有问题的方法,请不要将它们公开。除此之外,我想不出任何问题。出于同样的原因,请小心继承和继承方法。您可能希望检查允许通过白名单调用的方法。。。不仅测试试图调用私有方法的公共方法会出错,而且为了防止用户黑客攻击调用u destruction,如果方法需要参数,也会很有趣,你当然需要做一些形式的检查,如果这些参数是用户提供的,那么它也是api的,检查以确保给出了正确的参数,并且该方法存在。寻找gotchas,比如用户调用u destruct。@mitmaro-trap用于每个魔术方法,否则u get或u调用也可能被滥用。exists方法肯定会与其他一些检查一起使用。谢谢