zend_formを使っておりCSRF対策として使えるようだったので
Zend_Form_Element_Hashを試しているのですが以下のようなエラーになります。
「The two given tokens do not match」
ちなみにソースはこんな感じです。
$this->setMethod('post');
$this->addElement('text', 'username', array(
'label' => 'ユーザ名:',
'required' => true,
'validators' => array(
'Alnum',
'NotEmpty',
)
));
$this->addElement('password', 'password', array(
'label' => 'パスワード:',
'required' => true,
'validators' => array(
'Alnum',
'NotEmpty',
array('StringLength', false, array(8)),
)
));
$this->addElement('submit', 'login', array(
'ignore' => true,
'label' => 'Submit',
));
$this->addElement('hash', 'csrf', array(
'ignore' => true,
));
ソースを確認したところhiddenに値は埋め込まれてありました。
エラーからすると一致しないとの事なので$request->getPost()を
参照してみましたが確かに全く違う値でした。
というか、ポストされエラーがなければ生成した乱数をセッションに
登録し確認画面でhiddenの値とセッションの値が一致すればOKという
のが普通ですよね?
しかし、セッションをvar_dumpしても乱数が登録されてる様子もなく
何と比較しているのか根本的なところが謎です。。。
echo $this->_form->getValue('csrf');
上記のようにしても乱数の取得ができずマニュアルを見ても解決策が
全くわからないのですがどのようにすればうまく動作するのでしょうか?
No.1ベストアンサー
- 回答日時:
こちらでテストしてみましたが、特に問題なく動作しているようでした。
一度、シンプルな動作をさせてみてから、画面の遷移など考えてみてはいかがでしょう。
<?php
public function testAction(){
$form = new Zend_Form();
$form->addElement('hash', 'csrf');
$form->addElement('submit, 'test');
if($this->_request->isPost()){
$posts = $this->_request->getPost();
if($form->isValid($posts)){
echo "OK";
}else{
echo "NG";
}
}
}
?>
一応これで問題なく画面が遷移していました。
尚、Zend Frameworkが内部で使っているセッション用のクラスのZend_Session_Namespaceクラスは、スーパーグローバル変数である$_SESSIONには記録されないようですので、Zend_Form_Element_Hash内で使われている値を見たいなら、
<?php
$session = $form->test->getSession(); //testと書いてあるところはInputタグのName値
echo $session->hash;
?>
とかとすれば、取得したトークンが取得できると思います。
独自ルーティングの設定が関係してました。
うまく説明ができませんが、認証プラグインでログイン画面に飛ばす設定を変更したところ
エラーなく通りました!
原因は不明ですがひとまず解決しましたのでありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
要素(文字列)から指定値を検索
-
日付、時間の2段階でソート
-
file_get_contentsなどでrefere...
-
テキストボックスの日本語をロ...
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
[PHP] fputcsv()関数でファイル...
-
PHP 多次元配列変数のデータ受...
-
doxygenを使用する環境について
-
PHPのPOSTでの半角スペース
-
別ファイルの構造体の値を読み...
-
多次元配列を、1次元の配列にす...
-
PHPについて教えて下さい。
-
C言語で全角文字の扱いについて
-
文字列の文字一文字ずつを解析...
-
連想配列でキーを利用して一部...
-
PHPのセレクトボックスの初期値...
-
【PHP】配列の最後の要素の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
日付、時間の2段階でソート
-
NGワード設定もしくはテキス...
-
掲示板のあらし対策
-
flickrでの画像を取得について
-
テキストボックスの日本語をロ...
-
PHPでファイルアップローダー
-
HTTPのメッセージボディについ...
-
PEAR・MDB2のモジュールロード...
-
phpのin_array()でわからない事...
-
PHP5の外部コマンド実行で、バ...
-
Mysqlとphpでソートや更新時の...
-
しりとり 無限ループ?
-
2次元配列の値の受け渡しについ...
-
if の中の 複数のor についてお...
-
pukiwikiのユーザ認証の設定で...
-
Zend_Form_Element_Hash
-
「ローマ字 -> ひらがな」へPHP...
-
プログラミングのPythonのnoteb...
おすすめ情報