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オプションを使用することをお勧めします。同じ名前で異なるsaltの2つのハッシュは衝突しません。

私はデフォルトのソルトと同じハッシュ名を持っていたので、問題があったのも不思議ではありません。

于 2012-08-14T03:06:02.730 に答える