在 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访问,但可以从其他函数内部访问。