質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

2回答

4928閲覧

FuelPHPでCSRFトークンを複数フォームで扱いたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2016/06/13 04:14

編集2016/06/13 04:15

FuelPHPで、フォームの入力画面から確認画面への処理の間に、
CSRFトークンつかってバリデーションをしています。

php

1// View内のform内へ設置 2<?= Form::csrf() ?>

php

1//リクエスト先のControllerメソッド 2if ( ! \Security::check_token()) 3{ 4 Session::set_flash('error', 'CSRFトークンエラー'); // ulリスト付きのHTMLも生成している 5 Response::redirect("/hogeinput/", 'location', '302'); 6}

動作はしておりますが、以下の仕様に対応したいです。

①タブなどで複数のフォームを開く
②それぞれでCSRFトークンチェックを行いたい

デフォルトの仕様では、複数開くと同じCSRFトークンが発行されるため、最後に開いたVIEW以外のフォームは入力を完了してもCSRFトークンエラーとなります。

FuelPHPの機能で実現可能でしょうか。
もしデフォルトで不可能であれば、パッケージなども検討しています。
Sessionにゴニョゴニョ入れるのは面倒なので・・。

ご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Ajax向けの機能、Security::js_fetch_tokenを転用すれば出来そうな気がします。
Security::js_fetch_tokenは、現在のCSRFトークン取得するJavaScript関数
fuel_csrf_tokenの定義をビューに出力するためのメソッドです。

このfuel_csrf_tokenで取得した現在のトークンをsubmitイベントなどで
フォーム内のhidden項目に仕込めば期待通りの動作になると思われます。
(コントローラ側の修正箇所は特にありません)

javascript

1//viewファイル 2 3//fuel_csrf_tokenが使えるようになる 4<?php echo Security::js_fetch_token(); ?> 5 6//現在のトークン 7var token = fuel_csrf_token();

Security::fuel_csrf_token
http://fuelphp.jp/docs/1.8/classes/security.html#/method_js_fetch_token

投稿2016/06/13 09:21

nnssn

総合スコア1221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/13 11:26

ありがとうございます! 早速実装してみます。
guest

0

<?php // トークン生成Javascript echo Security::js_fetch_token(); // フォームSubmit時にトークン設定させる↓ echo Form::open(array('onsubmit' => 'fuel_set_csrf_token(this);')); // フォーム内容記述 echo Form::close(); ?>

既にご回答ありますように、Security::js_fetch_token()を出力し、フォームのSubmitでfuel_set_csrf_tokenという関数を実行させればOKかと。

投稿2016/09/24 15:32

montmonk

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問