我已经将Zend_Form_Element_Hash包含在一个表单multicheckbox表单中。我将jQuery设置为在单击复选框时触发AJAX请求,我将令牌与此AJAX请求一起传递。第一个AJAX请求效果很好,但随后的请求失败。
我怀疑可能是令牌通过验证之后才从会话中删除(跳= 1)。
使用Zend Framework Hash保护表单但使用AJAX完成其中一些请求的攻击计划是什么?
我最终放弃使用Zend_Form_Element_Hash,而是手动创建了一个令牌,并在Zend_Session中进行了注册,然后在提交时进行了检查。
form.php
$myNamespace = new Zend_Session_Namespace('authtoken'); $myNamespace->setExpirationSeconds(900); $myNamespace->authtoken = $hash = md5(uniqid(rand(),1)); $auth = new Zend_Form_Element_Hidden('authtoken'); $auth->setValue($hash) ->setRequired('true') ->removeDecorator('HtmlTag') ->removeDecorator('Label');
controller.php
$mysession = new Zend_Session_Namespace('authtoken'); $hash = $mysession->authtoken; if($hash == $data['authtoken']){ print "success"; } else { print "you fail"; }
这似乎有效,并且仍然使事情相对理智和安全。我仍然希望使用Hash元素,但似乎无法使其与AJAX一起使用。
谢谢大家