LoginSignup
6
7

More than 5 years have passed since last update.

[CakePHP 2.x]Securityコンポーネントのデバッグの仕方

Last updated at Posted at 2016-10-13

背景

あるプロジェクトにSecurityコンポーネントを導入してみましたが、
BlackHoleに直行してしまうという問題にはまりましたので、デバッグの仕方を共有します。


環境

PHP 5.6
CakePHP 2.x


解説

Securityコンポーネントは、Formヘルパーと弱い関連を持っています。
※実際にクラス同士が関連を持っているわけではなく "_Token" というリクエストパラメータでつながっています。
そのため、デバッグするときはSecuritytコンポーネントだけではなく、Formヘルパー側も意識する必要があります。

公式ドキュメントでの記載箇所は以下

CakePHP 2.x Cookbook:セキュリティ
CakePHP 2.x Cookbook:FormHelper - セキュリティコンポーネントを使う

処理の流れ

かなり省略した図ですが、以下がSecurityコンポーネントとFormヘルパーの処理の流れです。

image

  • 1.2: generateToken()で、リクエストパラメータ配列に"_Token"をセットしています。 ここではhashを生成しているだけなので、ここでデバッグしてもあまり意味がありません。
  • 2.1.1: secure()は、"_Token"がリクエストパラメータ配列にセットされていた場合に呼び出され、hiddenフィールドとしてTokenの値を出力しています。 ここでToken生成のロジックを見ることができますので、デバッグしてみると良いです。 ちなみにTokenは、フォームのフィールド情報のhash値です。 また、この処理はendメソッドから呼び出されるので、view側でendを呼んでいないと実行されません。
  • 1.1: blackHole()は、不正なリクエストと判断した場合に呼び出されます。 大抵はTokenのチェックに引っかかった場合に呼び出されると思われます。 ここのチェックロジックでデバッグして、生成ロジック側と見比べれば、どこが異なっているのかが分かると思います。

まとめ

なにかとはまるSecurityコンポーネントですが、
デバッグ箇所さえ把握できれば、問題はすぐに解決すると思います。


参考

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7