cakephp3.5.17にてクッキーのミドルウェアEncryptedCookieMiddlewareを導入しました。
Application.phpにて、クッキーのミドルウェアを導入して暗号化を行っています。
class Application extends BaseApplication { public function middleware($middleware) { $cookies = new EncryptedCookieMiddleware( // 暗号化するクッキーの名前 [ 'xxxxx' ], Configure::read('Security.cookieKey') ); $middleware ->add(ErrorHandlerMiddleware::class) ->add(AssetMiddleware::class) ->add(RoutingMiddleware::class) ->add($cookies); return $middleware; } }
クッキーの保存と読込は正常に行えている状態です。
デベロッパツールで該当のクッキーを見ると、暗号化されているのもわかります。
コントローラー内からは下記のような形で操作しています。
// クッキーの読込 $cookieData = $this->request->getCookie('xxxxx'); // クッキーの保存 $this->response = $this->response->withCookie('xxxxx', [ 'value' => $cookieData, 'expire' => strtotime("+31 day"), 'secure' => true, 'httpOnly' => true, ]);
コントローラー内では暗号化を意識せずに利用が可能となります。
詰まっている箇所としては、
ブラウザのデベロッパーツールなどでCookie内容を直接編集された場合、
データが壊れたものと扱われるためか、ミドルウェア上でエラーが発生して、アプリケーションに到達するまえに処理が中断されてしまっています。
エラー内容は「The data to decrypt cannot be empty.」と表示されております。エラー画面も貼らせて頂きます。
たとえば、try,catchなどでエラーが起きた場合は、Cookieを空にして保存し直すなどを行いたいのですが、ミドルウェアのエラー制御をどこに何を書けば良いか分からず…、ご教授頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/26 05:37