Más contenido relacionado
La actualidad más candente (20)
Similar a 20120307 CakePHP Study in Tokyo (20)
20120307 CakePHP Study in Tokyo
- 6. CakePHP2.1
祝 安定版リリース!!
2012/3/5
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 7. CakePHP2.1
●JsonView / XMLView の追加
●View の継承
●element('FooPlugin.bar');
●
柔軟なイベントシステム
●Callback に優先度の設定
●深い階層の配列データの保存
● ex. User – Post - Comment
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 8. CakePHP2.1
●php ファイルで ACL 定義
● app/Config/acl.php
●Router::defaultRouteClass() 追加
●Auth でユーザ検索の recursive 指定
●SQL Debug に Prepared Statements のパラメータ
表示
●app/Model/AppModel.php 必須
● Controller 、 Helper も
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 10. Cake2 Performance
●
環境
● Dell SC440(Pen, 2Gmem) Ubuntu
● PHP5.3.5(APC), Apache2, MySQL5.1
●
計測ツール
● siege -c 10 -b -t 3S
●
アプリケーション
● Bake した index アクション
●
paginate, many link
@ichikaway http://cake.eizoku.com/blog/
- 14. Mass Assignment vulnerability
●2012/3/5 Github がハックされる
● 脆弱性の Issue を上げたけど無視された
● ハックして自分が RoR の Master repo にコミット
するデモを披露
●Rails の MassAssignmentVlunerability
● Post されたデータをそのまま保存
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 15. Mass Assignment vulnerability
// In controller
$this->User->save($this->data);
// PostData
data[User][name] = 'Ichi'
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 16. Mass Assignment vulnerability
// In controller
$this->User->save($this->data);
// PostData
data[User][name] = 'Ichi'
data[User][is_admin] = '1'
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 17. Mass Assignment vulnerability
●CakePHP での対応方法
● SecurityComponent の利用
● デフォルトでフォーム改竄チェックが有効に
● save データの限定
● Model::whitelist プロパティで保存可能なフィー
ルドを絞る
● Model::save() の第 3 引数で保存可能なフィー
ルドを定義
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 19. CakePHP2 Tips
●Security Component でフォーム改竄チェックをは
ずす (CSRF 対応のみ利用したい)
// In controller
public $components = array(
'Security' => array('validatePost' => false),
);
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 20. CakePHP2 Tips
●Prepared Statements を利用
● Cake1 の query() は PreparedStatement ではない
// In controller
$sql = 'select * from posts as Post
where Post.id = :foo OR Post.id = :bar';
$result = $this->Post->getDatasource()->fetchAll(
$sql, array('foo'=>1, 'bar' => 2));
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 21. CakePHP2 Tips
●
コントローラ、モデルを階層管理
● CakePHP1 では自動探索で無問題
App/Controller/Admin/AdminController.php
App/Controller/Admin/FooController.php
App/Controller/User/PostController.php
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 22. CakePHP2 Tips
●
コントローラ、モデルを階層管理
● CakePHP2 ではパスを指定
// in bootstrap.php
App::build(array(
'Controller' => array(
'/app/Contoroller/Admin/',
'/app/Contoroller/User/'
)));
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 23. CakePHP2 Tips
●
コントローラ、モデルを階層管理
● CakePHP2 でも自動探索したい!
AutoAppBuild Plugin
https://github.com/ichikaway/AutoAppBuild
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 24. CakePHP2 Tips
●コントローラ、モデルを階層管理
● AutoAppBuild
● app/Plugin/AutoAppBuild に設置
// in bootstrap.php
CakePlugin::load(array(
'AutoAppBuild' => array('bootstrap' => true)
));
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 26. Motivation
●エレメントの内容を DB に入れて管理したい
● エレメントには html タグ、 php コードが混在
● ファイルの場合は、 include すれば html/php がレ
ンダリングされて出力
● DB 内のエレメントコンテンツを入れた変数を
include したい! <- これどうやるの?
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 27. Stream
●PHP のストリーム
● ファイルの入出力のように様々なプロトコルを透過
的に扱う仕組み
● fopen('http://example.com/foo/bar');
● fopen('file://foo/bar.txt');
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 28. Stream
●PHP のストリーム
● ftp://
● php://
● zlib://
● data://
● ssh2://
● php://
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 29. Stream
●PHP のストリーム
● data:// の text/plain で実現できそう
$data = 'hello <?php echo "world"; ?>';
include('data://text/plain,' .$data);
php.ini の下記条件が必須
allow_url_fopen = ON
allow_url_include = ON
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 30. Stream
●PHP のストリームを自作することに
● https://gist.github.com/1832549
●
App::import('Vendor', 'VariableStream');
stream_wrapper_register("var", "VariableStream");
$val = 'Hello <?php echo "World"; ?>';
include("var://".urlencode($val));
// 内部で urldecode している
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 31. Stream
●PHP のストリームに必須なメソッド
● url_stat()
● stream_stat()
● stream_open() 変数の読込み
● stream_read() 読込んだ変数を返す
● stream_tell() 読込んだポジション
● stream_eof() 読込み終了判定
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper