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

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

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

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

8361閲覧

cakephp3のCSRF対策について

Discord

総合スコア51

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/10/04 05:23

編集2018/10/04 08:33

cakephp3.6にてCSRF対策をするために、AppController.phpでCSRFコンポーネントを有効にしました。

PHP

1class AppController extends Controller 2{ 3 public function initialize() 4 { 5 $this->loadComponent('Csrf'); 6 } 7}

FormHelperを使用してフォームも作っているのですが、submitした後、「CSRF token mismatch」のエラーが吐かれ、404ページに移動してしまいます。

エラーログ

Error: [Cake\Http\Exception\InvalidCsrfTokenException] CSRF token mismatch. .. .. /hoge/vendor/cakephp/cakephp/src/Controller/Component/CsrfComponent.php(103): Cake\Controller\Component\CsrfComponent->_validateToken(Object(Cake\Http\ServerRequest))

原因がわからず、困っております。
ご教示のほど、よろしくお願いいたします。

以下、追記です。
/src/Application.php

PHP

1 public function middleware($middlewareQueue) 2 { 3 $middlewareQueue 4 // Catch any exceptions in the lower layers, 5 // and make an error page/response 6 ->add(ErrorHandlerMiddleware::class) 7 8 // Handle plugin/theme assets like CakePHP normally does. 9 ->add(AssetMiddleware::class) 10 11 // Add routing middleware. 12 // Routes collection cache enabled by default, to disable route caching 13 // pass null as cacheConfig, example: `new RoutingMiddleware($this)` 14 // you might want to disable this cache in case your routing is extremely simple 15 ->add(new RoutingMiddleware($this, '_cake_routes_')) 16 17 // Add csrf middleware. 18 ->add(new CsrfProtectionMiddleware([ 19 'httpOnly' => false 20 ])); 21 22 return $middlewareQueue; 23 }

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

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

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

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

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

m.ts10806

2018/10/04 07:54

エラーについてもできればcode機能使っていただけたらと
popobot

2018/10/04 08:10

ブラウザでフォームを見たときに、nameが_csrfTokenのhiddenなinputがありますか?
Discord

2018/10/04 08:11

Code機能を使い、修正しました。
Discord

2018/10/04 08:12

nameが_csrfTokenのhiddenなinputはあります!
popobot

2018/10/04 08:23 編集

src/Application.phpを見て、CsrfProtectionMiddlewareは使ってないですか?(3.6だとこっちが推奨ですけど) 手元の環境では両方有効にすると上記のエラーになりますねー (可能性ありそうなので、回答欄にも書いてみました)
guest

回答1

0

ベストアンサー

CakePHP3.6では、デフォルトでCsrfProtectionMiddlewareが有効になっており、その状態でCSRFコンポーネントも有効にするとCSRF token mismatchなるようです。

src/Application.phpを見て、CsrfProtectionMiddlewareが有効になっていないか確認してください。

なお、CSRFコンポーネントは非推奨なので、CsrfProtectionMiddlewareを利用することをオススメします

投稿2018/10/04 08:22

popobot

総合スコア6586

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

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

Discord

2018/10/04 08:34

回答ありがとうございます。 有効かどうかわかりませんが、中身を質問の方に書き足しました。 有効ってことですかね?? CsrfProtectionMiddlewareの使い方がいまいちわからないのですが、どのようにして使うのでしょうか。
popobot

2018/10/04 08:36

はい、有効になっていますねー なので、CSRFコンポーネントを追加しなくてもCSRF対策できていると思います
Discord

2018/10/04 08:37

ありがとうございます! 特に対策しなくても3.6では有効ということですね。
popobot

2018/10/04 08:38 編集

念のため、フォームのCSRFトークンを変更したりして、submitしてみるといいと思います(ちゃんとエラーになるか)
Discord

2018/10/04 08:38

りょうかいしました。 そのあたりはテストしながら確認してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問