【问题标题】:Whitelisting instead of blacklisting with SecurityComponent::requireSecure()使用 SecurityComponent::requireSecure() 将其列入白名单而不是列入黑名单
【发布时间】:2012-10-06 21:37:48
【问题描述】:

我想使用 CakePHP 的 SecurityComponent 来强制使用 requireSecure() 通过 SSL 发出应用请求。

我的问题是,默认情况下这是一种黑名单方法 - 默认情况下允许不安全的访问,除非该控制器明确禁止。我想切换到白名单方法 - 默认情况下拒绝不安全的访问,除非我在该控制器中明确允许它。

此功能是否内置在 SecurityComponent 中?如果没有,我该如何手动设置?

【问题讨论】:

  • 我有兴趣在我自己用 CakePHP 构建的应用程序中强制使用 SSL。但是将所有 http 请求重定向到 https 从而强制使用 ssl 不是更好吗?从用户的角度来看,这似乎也更加微妙,因为他们只是重定向,而不是如果他们使用错误的协议就会出现安全错误。
  • 作者试图避免中间人攻击,Is redirecting http to https a bad idea。绝对是一个巨大的可用性问题,黑洞是一个糟糕的解决方案。不是这方面的专家,但我认为这个问题有最好的解决方案。

标签: cakephp


【解决方案1】:

这似乎不是默认内置的。您可以通过创建控制器的$requireSecure 属性来模拟这一点,然后有条件地在AppController::beforeFilter() 中调用requireSecure()。以下是你将如何实现它:

AppController.php:

public $requireSecure = true;

public function beforeFilter() {
    if ($this->requireSecure) {
        $blacklist = is_array($this->requireSecure) ? $this->requireSecure : array('*');
        $this->Security->requireSecure($blacklist);
    }
}

白名单控制器:

public $requireSecure = false;

控制器,因方法而异(注意$requireSecure 是黑名单):

public $requireSecure = array('login');

这实现了默认要求 SSL 的目标,但如果需要,可以在控制器中显式覆盖此要求。

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 2021-12-08
    • 1970-01-01
    • 2015-01-04
    • 2020-01-22
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多