我有一个控制器类,它从 CakePHP 中的 AppController 扩展而来。 并且这个控制器类有一个公共函数..比方说testFunc()
class xyzController extends AppController {
..
..
public function testFunc($params, $auth_username)
{
..
..
}
}
我已经公开了这个函数,因为我需要从另一个控制器调用它,该控制器也从 AppController 扩展。
class abcController extends AppController {
..
..
public function callingFunc()
{
...
$controller = new xyzController($this->request, $this->response);
$controller->testFunc($params, $username);
}
..
..
}
但是由于我将其公开,我看到可以使用以下https路径的curl命令访问testFunc()
https://[ip_address]/xyz/testFunc/arg=test/root
如您所见,上面的路径将"root"作为testFunc()的参数,并为在curl命令中使用上述路径的任何人提供完全访问权限。
我的要求是消除此安全问题。
我对PHP和CakePHP完全陌生。有人可以给我如何继续的任何指示吗?
我需要从另一个控制器调用它"。这几乎从来都不是真的,它通常表明设计有缺陷。如果testFunc
不是通过浏览器访问的,则将其移动到两个控制器都可以访问它的位置,而无需它是公共成员。例如,使其成为AppController
的受保护(甚至私有)成员,或者如果它正在执行特定于模型的事情,也许可以将其移动到该模型的表类中。
解决方案非常简单。
公共函数_testFunc($params,$auth_usernmae)将发挥魔力。
在 Cakephp 中,如果函数有下划线作为前缀,则无法使用 URI 访问它,但可以从其他函数内部访问。