質問するログイン新規登録

Q&A

解決済

1回答

2633閲覧

【CakePHP4】CSRF機能を解除したい

joywont

総合スコア16

PHP

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

CakePHP

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

0グッド

0クリップ

投稿2023/06/28 09:08

0

0

実現したいこと

CakePHP4はデフォルトでCSRF機能がオンになっているということなのだそうで、その機能をオフにしたいです。

前提

情報をDBに登録するだけのフォームを構築しているのですが、送信するとCSRF機能によりエラーが発生してしまいます。
決まった室内で使用するシステムのためということで、ひとまず機能はオフにしたいです。

発生している問題・エラーメッセージ

送信テストを行うと以下のようなエラーが発生します。

php

1CSRF token from either the request body or request headers did not match or is missing.

ネット上によくある情報からすると、AppController.phpに設定しているソースをコメントアウト、もしくは削除すると良いというお話をよく目にするのですが、そもそもAppController.phpは何も触っておらずそのようなソースを見たことありません。

該当のソースコード

良く見つかる情報

php

1以下の部分をコメントアウト 2// ->add(new CsrfProtectionMiddleware([ 3// 'httponly' => true, 4// ]));

試したこと

まずはAppController.phpにCSRF機能を有効にするソースをいれてみました。
公式ドキュメントより

php

1// src/Application.php 2// セッションベースの CSRF トークンの場合 3use Cake\Http\Middleware\SessionCsrfProtectionMiddleware; 4 5public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue 6{ 7 $options = [ 8 // ... 9 ]; 10 $csrf = new SessionCsrfProtectionMiddleware($options); 11 12 $middlewareQueue->add($csrf); 13 return $middlewareQueue; 14}

すると、以下のようなエラーが発生します。

php

1Fatal error: Declaration of App\Controller\Admin\AppController::middleware(App\Controller\Admin\MiddlewareQueue $middlewareQueue): App\Controller\Admin\MiddlewareQueue must be compatible with Cake\Controller\Controller::middleware($middleware, array $options = []) in C:\xampp\htdocs\cakephp\src\Controller\Admin\AppController.php on line 99

余計ひどくなりました。
そいうことで手詰まりで解決方法見つからず数日ハマっております。
どなたか解決方法ご教授していただけたら幸いです。
どうぞよろしくお願いします。

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

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

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

guest

回答1

0

ベストアンサー

この回答はGPT-4による自動生成回答です

CakePHP 4では、CSRF保護はデフォルトで有効になっています。これを無効にするには、src/Application.phpmiddleware()メソッドからCsrfProtectionMiddlewareを削除する必要があります。

以下にその手順を示します。

php

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

上記のコードでは、CsrfProtectionMiddlewareの行がコメントアウトされています。これにより、CSRF保護が無効になります。

ただし、CSRF保護を無効にすることは、セキュリティ上のリスクを伴います。そのため、本番環境での使用は推奨されません。開発環境でのみ無効にすることをお勧めします。

投稿2023/06/28 09:09

teratail-ai

Powered by GPT-4

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問