在 CakePHP 中限制 HTTP 访问
Restrict HTTP access in CakePHP
我有一个从 CakePHP 中的 AppController 扩展而来的控制器 class。
而这个控制器 class 有一个 public 功能..可以说 testFunc()
class xyzController extends AppController {
..
..
public function testFunc($params, $auth_username)
{
..
..
}
}
我创建了这个函数 public 因为我需要从另一个从 AppController 扩展的控制器调用它。
class abcController extends AppController {
..
..
public function callingFunc()
{
...
$controller = new xyzController($this->request, $this->response);
$controller->testFunc($params, $username);
}
..
..
}
但是自从我做到了 public,我发现 testFunc()
可以使用以下 https 路径的 curl 命令访问
https://[ip_address]/xyz/testFunc/arg=test/root
如您所见,上述路径将“root”作为 testFunc() 的参数,并向在 curl 命令中使用上述路径的任何人提供完全访问权限。
我的要求是解决这个安全问题。
我对 PHP 和 CakePHP 完全陌生。有人可以指导我如何继续吗?
“我需要从另一个控制器调用它”。这几乎从来都不是真的,它通常表明设计有缺陷。如果 testFunc
不打算通过浏览器访问,则将其移动到两个控制器都可以访问它的地方,而无需它成为 public 成员。例如,使其成为您 AppController
的受保护(甚至私有)成员,或者如果它正在做 model-specific 的事情,也许可以将其移至该模型的 table class .
解决方法很简单。
public 函数 _testFunc($params, $auth_usernmae) 会发挥作用。
在Cakephp中,如果函数有一个下划线作为前缀,那么它不能使用URI访问,但可以从其他函数内部访问。
我有一个从 CakePHP 中的 AppController 扩展而来的控制器 class。
而这个控制器 class 有一个 public 功能..可以说 testFunc()
class xyzController extends AppController {
..
..
public function testFunc($params, $auth_username)
{
..
..
}
}
我创建了这个函数 public 因为我需要从另一个从 AppController 扩展的控制器调用它。
class abcController extends AppController {
..
..
public function callingFunc()
{
...
$controller = new xyzController($this->request, $this->response);
$controller->testFunc($params, $username);
}
..
..
}
但是自从我做到了 public,我发现 testFunc()
可以使用以下 https 路径的 curl 命令访问
https://[ip_address]/xyz/testFunc/arg=test/root
如您所见,上述路径将“root”作为 testFunc() 的参数,并向在 curl 命令中使用上述路径的任何人提供完全访问权限。
我的要求是解决这个安全问题。
我对 PHP 和 CakePHP 完全陌生。有人可以指导我如何继续吗?
“我需要从另一个控制器调用它”。这几乎从来都不是真的,它通常表明设计有缺陷。如果 testFunc
不打算通过浏览器访问,则将其移动到两个控制器都可以访问它的地方,而无需它成为 public 成员。例如,使其成为您 AppController
的受保护(甚至私有)成员,或者如果它正在做 model-specific 的事情,也许可以将其移至该模型的 table class .
解决方法很简单。
public 函数 _testFunc($params, $auth_usernmae) 会发挥作用。
在Cakephp中,如果函数有一个下划线作为前缀,那么它不能使用URI访问,但可以从其他函数内部访问。