スタッフブログ

  • カテゴリ 技術全般 の最新配信
  • RSS

CakePHP1.2でのSecurityコンポーネントの変更点

 : 技術全般 2009/3/2 9:34

Blogger's Avatar

satoです。
CakePHPの1.1→1.2は、一部大きな修正があります。そのまま使おうとすると、思った通りに動作しない可能性があります。
今回は大きな変更が加えられているSecurityコンポーネントについて説明します。

Securityコンポーネントは、1.1では大きく2つの機能があります。
・CSRF対策
・POSTメソッド制限

※今回の調査に関して、CakePHP1.1の通常パッケージのダウンロード先がわからなかったため、nightlyを使用しています。

1.1では、controllerのbeforeFilter内で、

function beforeFilter() {
$this->Security->requireAuth('add');
}


のようにすると、addアクションでのみトークンチェックが入ります。
また、$this->Security->requirePost('add');のようにすると、addはPOSTメソッドでしかアクセスできなくなります。

1.2では、機能自体が大幅に増えています。
1.1の機能の他に
・BASIC/DIGEST認証
・POST以外のメソッド制限(GET/PUT/DELETE)
・SSLチェック
といったものが増えています。

しかし、CSRF対策のコードが、1.1と1.2で別物になっています。

1.1は
・startup内で、requireAuthに現在のアクション名が入っていたら、トークンチェックを行う
というものでしたが、1.2では、
・requireAuthに現在のアクション名が含まれる場合、allowedControllersとallowedActionsをチェックする(含まれない場合は特に何もチェックしない)
・controllerにrequested==1というパラメータが入っているか、validatePost==trueでない限り、POSTリクエスト時に_validatePostでトークンのチェックを常に行う
という、不可解な挙動をします。
つまり、requireAuthに何が入っていても、Securityコンポーネントを組み込んだ時点で全ての画面にトークンチェックが入ることになります。

ドキュメントを見る限りだと、1.2でもrequireAuthを見てトークンチェックを行うような感じではあるのですが、どう解釈していいのかわからないところです。

現状としては、Securityコンポーネント自体を使わず、独自でCSRF対策を用意するのが無難だと思います。

この他にも1.2での変更点は多いので、1.2をダウンロードして1.1の解説サイトを見て困らないように注意しましょう。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.