CakePHP安全组件可以';别叫了

CakePHP安全组件可以';别叫了,php,security,cakephp,controllers,Php,Security,Cakephp,Controllers,当我尝试调用任何应用程序中的“安全”组件时,我网站的某些页面会崩溃。例如,在AppController文件中,如果我将组件定义从 var $components = array('Auth','Session','Email'); 到 我的站点上依赖其他页面发布数据的页面崩溃。我得到的只是一个空白屏幕。 在\cake\libs\controller\components目录中定义并存储了“security.php” 关于是什么导致了这种情况,或者如何处理这种情况,有什么想法吗?这就是Secur

当我尝试调用任何应用程序中的“安全”组件时,我网站的某些页面会崩溃。例如,在AppController文件中,如果我将组件定义从

var $components = array('Auth','Session','Email');

我的站点上依赖其他页面发布数据的页面崩溃。我得到的只是一个空白屏幕。 在\cake\libs\controller\components目录中定义并存储了“security.php”


关于是什么导致了这种情况,或者如何处理这种情况,有什么想法吗?

这就是SecurityComponent应该做的

它通过向所有表单添加“令牌”来保护应用程序,以检查表单是否“有效”且未被篡改(例如,有人使用javascript向表单添加了额外字段或值)

它还检查发布的表单是否来自允许这样做的控制器和/或操作(AllowedController)

如果不满足要求,则调用“blackHoleAction”,停止进一步的操作

根据您对“var$components”而非“public$components”的使用情况,它认为您正在运行Cakephp 1.3。请参阅此处的SecurityComponent文档:

阅读AllowedController和allowedActions部分

您的脚本中的某个地方也可能有错误,因为调试被禁用而不可见。要启用调试,请在core.php配置文件中将调试级别更改为1或2

app/Config/core.php使用以下行将调试级别设置为2:

Configure::write('debug', 2);

谢谢我正在尝试将页面从http路由到https以进行SSL连接。页面(操作)在订单控制器中定义。下面我在$components中添加了“Security”,在beforeFilter()fxn if(isset($this->params['order']){$this->Security->blackHoleCallback='forceSSL';$this->Security->requireSecure();}和这个函数forceSSL(){$this->redirect('https://'.env('SERVER_NAME')).$this->here);}btw版本是2.9,这样做仍然会使“order”控制器中定义的页面/操作崩溃,并且也不会被重定向到https://上。我遗漏了什么吗?我不确定您是否应该使用
$this->params
,它可能需要是
$this->request->params
(可能是文档中的错误)。在所有情况下,如果启用调试,是否会出现任何错误?还有,你有没有试过用一个简单的“死(“helloworld”);”在forceSSL()方法中检查它是否到达那里?调试请求
debug($this->request)在beforeFilter()开始时,可能还会给出一些提示最后一点,请编辑原始问题并包括“beforeFilter()”和“forceSSL()”操作的源代码,以及AppControllerHanks中的安全组件配置。关于cakephp版本,我错了。它是1.3。下面是函数beforeFilter(){parent::beforeFilter();$this->Auth->allowedActions=array(“…我的操作列表”);$this->Security->validatePost=false;$this->Security->blackHoleCallback='forceSSL';$this->Security->requireSecure('myAction需要保护');}//函数beforeFilter()结束由于beforeFilter fxn首先定义allowedActions,并将validatePost设置为false(这将关闭CSRF),因此我去掉了if-isset条件。虽然不是最优的,但似乎正在尝试将“安全性”移到$components数组的开头?
Configure::write('debug', 2);