从用户输入动态调用类中的方法是否存在任何安全问题。例如:
<?php
class A {
public function foo() {
return true;
}
}
$obj = new A();
$method = $_GET['method'];
$obj->$method();
我知道用户可以在A
内调用任何方法,我很好。如果可能存在其他可能的安全问题,我很好奇。
答案 0 :(得分:4)
您的用户可以尝试从您的班级调用任何可能的方法 - 甚至尝试调用不存在的方法(并获得致命错误)。
如果你对此很好......好吧,我想这没关系。
它看起来不太好,但我不认为可以注入任何其他类型的代码。
不过,我至少会检查方法是否存在 - 使用method_exists()
答案 1 :(得分:1)
是的,这可能是一个坏主意,也许你应该限制允许的方法。也许在数组中定义允许的方法然后如果$ method不在此白名单中则抛出异常。
此外,您还需要使用magic __call($ name,$ args)方法来调用这些用户定义的方法。