Posts tagged security
[CakePHP] SSL 接続を必須にする SSL コンポーネント
0CakePHP で SSL 接続を必須にするには以前書いた、Security コンポーネントを使う方法があります。
CakePHP1.2 Security コンポーネントを使用して SSL でのみアクセスを許可する
しかし、単純に SSL 接続を必須にしたい場合は、Baker にある SSL コンポーネントを使うのが簡単です。
Component for forcing a secure connection (Articles) | The Bakery, Everything CakePHP
(続きを読む…)
[iPhone] 実機転送時にセキュリティーエラーになった時の対処方法
1Xcode から iPhone にアプリを転送しようとしたら、コンソールに下記のエラーメッセージが出て転送できませんでした。
Error launching remote program: security policy error.
原因と解決方法を先に書くと、原因は期限が切れたプロファイルがあったためで、解決方法は期限切れのプロファイルを削除すると無事転送できるようになりました。
この期限切れのプロファイルは転送するアプリで使用しているプロファイルとは関係なくてもセキュリティーエラーに引っかかるようです。今回も実際に転送するアプリとは違うアプリで使用しているプロファイルが期限切れでした。
(続きを読む…)
CakePHP1.2 Security コンポーネントを使用して SSL でのみアクセスを許可する
0開発案件でアクション毎に SSL でのアクセスを必須にしたかったので調べていたところ下記の情報がありました。
SSL経由でのアクセスを必須にする[CakePHP] YARETOKO「ヤレトコ」メインブログ
早速 cake/cake/libs/controller/components/security.php のソースを確認して検証してみました。
(続きを読む…)
CakePHP 1.2 RC1 リリース!
1Release: Pure Cake Power in RC1 | The Bakery, Everything CakePHP : Articles
CakePHP 1.2 RC1 がリリースされましたね。早速試してみたいと思います。
Finally – CakePHP 1.2 RC1 is out! ? Debuggable Ltdによると
800++ commits
100++ bug fixes
tons of security and feature additions
だそうです。
CakePHP Security コンポーネントのまとめ
1CakePHP の Security コンポーネント の動作を調べたのでまとめておきます。
この Security コンポーネントをうまく使用すればクロスサイトリクエストフォージェリ(CSRF) を防ぐことができるでしょう。
トークンの使用
フォームにワンタイムトークンを実装する方法です。
コントローラの beforeFilter メソッドでトークンをチェックするアクションを指定
function beforeFilter() { $this->Security->requireAuth('login'); }
ビューのフォーム内にトークンを設定
<?php echo $html->formTag(); ?>
トークンが hidden 属性で生成される
トークンが一致しない場合
requireAuth で指定したアクションに POST でアクセスがあるとセションに保存したトークンとフォームから送られてきたトークンが一致するかチェックします。またそのほかにトークンの有効期間もチェックします。有効期間は CAKE_SECURITY の設定により違います。
CAKE_SECURITY | 有効期間 |
---|---|
high | 10分 |
medium | 100分 |
low | 300分 |
トークンが一致しないと SecurityComponent の blackHole メソッドが実行されます。このメソッドでは
header('HTTP/1.0 404 Not Found');
を出力して exit します。(画面は空白)
任意の処理を実行したい場合は blackHoleCallback でコールバック関数を指定します。
設定できるのは同じコントローラ内のアクションのみになります。
function beforeFilter() { $this->Security->blackHoleCallback = "securityError"; $this->Security->requireAuth('login'); } function securityError() { die("security error!"); }
トークンチェックをするアクションを複数指定するときはカンマでつなげる
$this->requireAuth('login', 'delete');
特定のコントローラからのポストのみ許可する
$this->Security->allowedControllers = array("users");
これを指定するとたとえトークンが一致しても許可のないコントローラからのポストの場合は blackHole メソッドを実行します。
特定のアクションからのポストのみ許可する
$this->Security->allowedActions = array("action");
これを指定するとトークンが一致しても許可のないアクションからのポストの場合は blackHole メソッドを実行します。
ポストのみ受け付けるようにする
$this->requirePost('login');
これはトークンとは違い、POST のみ許可して GET でのアクセスを不可にします。
/users/login/ のような URL でのアクセスも GET なので不可になります。
POST の処理だけを実行したいようなアクションに使用します。