【发布时间】:2011-10-29 19:38:51
【问题描述】:
我有一点关于 CSRF 安全性和登录表单的问题。表单的工作方式如下:
在主布局中,视图助手会创建一个登录表单,并且稍后还会在用户通过身份验证时显示用户特定的菜单。
// User menu viewhelper
public function authentication()
{
// Check if user is authenticated or not
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity())
{
$form = new Application_Form_Login();
$form->setAction($this->_view->url(array('action' => 'login'), 'ucp', true));
return $form;
}
else
{
// return user specific menu
}
}
表单发布到包含所有用户控制面板逻辑的 UcpController,例如登录/注销和显示用户特定信息。
// loginAction in UcpController
public function loginAction()
{
if(Zend_Auth::getInstance()->hasIdentity())
{
$this->_redirect('/');
return;
}
$request = $this->getRequest();
$form = new Application_Form_Login();
if($request->isPost())
{
if($form->isValid($post = $request->getPost()))
{
// Do authentication stuff here.
}
}
$this->view->form = $form;
}
遗憾的是,CSRF 令牌无法匹配,我不知道如何解决这个问题。我在这里错过了什么吗?我应该一起删除 CSRF 验证吗?
// The CSRF protection element as added to the login form
$this->addElement('hash', 'csrf',
array(
'ignore' => true
)
);
在此先感谢,非常感谢您的帮助:)
【问题讨论】:
标签: php forms zend-framework csrf