2016-01-23 94 views
2

我正在使用Zend_Form_Element_Hash來保護我網站上的csrf。下面是代碼在我form.php的Zend框架1.12 - 哈希表格驗證返回錯誤

$token = new Zend_Form_Element_Hash('token', 'csrf'); 
$token->setSalt(md5(uniqid(rand(), TRUE))); 
$token->initCsrfToken(); 
$token->initCsrfValidator(); 
$this->addElement($token); 

當我檢查$形式 - > isValid方法在我的控制器我總是得到下面的錯誤

The two given tokens do not match 

要在這裏感謝任何幫助!

回答

1
  1. Csrf存儲在會話中,csrf的會話名稱取決於salt。如果 鹽是隨機的,會話名稱也是隨機的。所以你不能從會話中獲得csrf 以便將其與來自post的csrf進行比較。使鹽 不斷爲這種形式。

  2. 不要調用initCsrfToken,此方法會重置csrf,並在渲染時自動調用 。

  3. 更好的傳輸上元素創建鹽

    $token = new Zend_Form_Element_Hash('token', 'csrf', array('salt' => 'secure')); 
    $this->addElement($token); 
    
+0

感謝@Max我會嘗試了這一點! –