动态调用PHP类方法

时间:2011-03-18 16:32:35

标签: php security

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

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

    $obj = new A();

    $method = $_GET['method'];

    $obj->$method();

我知道用户可以在A内调用任何方法,我很好。如果可能存在其他可能的安全问题,我很好奇。

2 个答案:

答案 0 :(得分:4)

您的用户可以尝试从您的班级调用任何可能的方法 - 甚至尝试调用不存在的方法(并获得致命错误)
如果你对此很好......好吧,我想这没关系。

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


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

答案 1 :(得分:1)

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

此外,您还需要使用magic __call($ name,$ args)方法来调用这些用户定义的方法。