1

我的网站上有大量各种形式的 ZF1 加盐哈希元素,99% 的时间它们都可以正常工作,但偶尔会失败。这通常似乎发生在重定向之后,但不在重定向跃点内。该表单是在重定向之后以单独的操作创建的,所以我不明白为什么重定向会影响它。失败的表单正确地生成了它们的令牌,它们只是在 POST 和验证后不匹配。

有任何想法吗?

下面的哈希元素:

$token = $this->createElement(
    'hash', 
    'token', 
    array('timeout' => 1440)
);

$token->setSalt($config->csrf->salt)
      ->addErrorMessage('The session for this form has timed out.');

$this->addElement($token);
4

1 回答 1

1

事实证明,这个问题是由于令牌命名造成的。我有一个名为“token”的标准哈希元素,它被添加到所有表单中。我更改了代码,以便令牌名称前面带有表单名称,而不是“令牌”,它们现在是“loginformtoken”等。

我仍然不确定这是否是由于重定向导致我的代码出现问题,或者 ZF 是否在任何地方使用了内部“令牌”会话(ZF 源代码中似乎大量使用了令牌这个词)导致了冲突。

尽管如此,使用唯一的哈希 id 似乎是前进的方向,我将来会遵循这个标准。

编辑:

这完全是我没有阅读手册的错:

哈希元素的名称应该是唯一的。我们建议对元素使用 salt 选项 - 具有相同名称和不同盐的两个哈希不会发生冲突。

我有一个默认的盐和相同的哈希名称,所以难怪我遇到了问题。

于 2012-08-14T03:06:02.730 回答