ヤザマキ春の Cake 祭り      2012/3/7   CakePHP study   Yasushi Ichikawa
I amYasushi Ichikawa@cakephperhttp://d.hatena.ne.jp/cakephper
ServicesKANAELhttp://kanael.netATND::Paymenthttp://atndpay.eizoku.comTipsharehttp://tipshare.info
CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper   @ichikaway   http://cake.eizoku.com/blog/
CakePHP 2.1
CakePHP2.1           祝 安定版リリース!!                         2012/3/5@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
CakePHP2.1 ●JsonView / XMLView の追加 ●View の継承 ●element(FooPlugin.bar); ●  柔軟なイベントシステム ●Callback に優先度の設定 ●深い階層の配列データの保存     ...
CakePHP2.1 ●php ファイルで ACL 定義     ●   app/Config/acl.php ●Router::defaultRouteClass() 追加 ●Auth でユーザ検索の recursive 指定 ●SQL De...
Cake2.1Performance
Cake2 Performance●    環境●   Dell SC440(Pen, 2Gmem) Ubuntu●   PHP5.3.5(APC), Apache2, MySQL5.1●    計測ツール●   siege -c 10 -b ...
Cake2 PerformanceBake しただけの画面を対象に計測  @ichikaway   http://cake.eizoku.com/blog/
Cake2 Performance● CakePHP1.3.11  ● 29 req/sec● CakePHP2.0.4  ● 40 req/sec● CakePHP2.1.0  ● 38 req/sec    @ichikaway   htt...
MassAssignmentVulnerability
Mass Assignment vulnerability ●2012/3/5 Github がハックされる     ●   脆弱性の Issue を上げたけど無視された     ●   ハックして自分が RoR の Master repo に...
Mass Assignment vulnerability // In controller $this->User->save($this->data); // PostData data[User][name] = Ichi@cakephp...
Mass Assignment vulnerability // In controller $this->User->save($this->data); // PostData data[User][name] = Ichi data[Us...
Mass Assignment vulnerability ●CakePHP での対応方法     ●   SecurityComponent の利用         ●   デフォルトでフォーム改竄チェックが有効に     ●   save ...
CakePHP2Tips
CakePHP2 Tips ●Security Component でフォーム改竄チェックをは ずす (CSRF 対応のみ利用したい) // In controller public $components = array(     Secur...
CakePHP2 Tips ●Prepared Statements を利用     ●   Cake1 の query() は PreparedStatement ではない// In controller$sql = select * fro...
CakePHP2 Tips ●  コントローラ、モデルを階層管理     ●   CakePHP1 では自動探索で無問題App/Controller/Admin/AdminController.phpApp/Controller/Admin/F...
CakePHP2 Tips ●  コントローラ、モデルを階層管理     ●   CakePHP2 ではパスを指定// in bootstrap.phpApp::build(array(    Controller => array(     ...
CakePHP2 Tips ●  コントローラ、モデルを階層管理     ●   CakePHP2 でも自動探索したい!     AutoAppBuild Plugin     https://github.com/ichikaway/Auto...
CakePHP2 Tips ●コントローラ、モデルを階層管理     ●   AutoAppBuild     ●   app/Plugin/AutoAppBuild に設置// in bootstrap.phpCakePlugin::load...
StreamWrapper
Motivation ●エレメントの内容を DB に入れて管理したい     ●   エレメントには html タグ、 php コードが混在     ●   ファイルの場合は、 include すれば html/php がレ         ン...
Stream ●PHP のストリーム     ●   ファイルの入出力のように様々なプロトコルを透過         的に扱う仕組み     ●   fopen(http://example.com/foo/bar);     ●   fope...
Stream ●PHP のストリーム     ●   ftp://     ●   php://     ●   zlib://     ●   data://     ●   ssh2://     ●   php://@cakephper ...
Stream ●PHP のストリーム     ●   data:// の text/plain で実現できそう$data = hello <?php echo "world"; ?>;include(data://text/plain, .$d...
Stream ●PHP のストリームを自作することに     ●   https://gist.github.com/1832549     ●App::import(Vendor, VariableStream);stream_wrapper...
Stream ●PHP のストリームに必須なメソッド     ●   url_stat()     ●   stream_stat()     ●   stream_open() 変数の読込み     ●   stream_read()  読込...
CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper   @ichikaway   http://cake.eizoku.com/blog/
THANK YOU@cakephper   http://cake.eizoku.com/blog/
Upcoming SlideShare
Loading in …5
×

20120307 CakePHP Study in Tokyo

3,323 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,323
On SlideShare
0
From Embeds
0
Number of Embeds
1,310
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20120307 CakePHP Study in Tokyo

  1. 1. ヤザマキ春の Cake 祭り 2012/3/7 CakePHP study Yasushi Ichikawa
  2. 2. I amYasushi Ichikawa@cakephperhttp://d.hatena.ne.jp/cakephper
  3. 3. ServicesKANAELhttp://kanael.netATND::Paymenthttp://atndpay.eizoku.comTipsharehttp://tipshare.info
  4. 4. CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper @ichikaway http://cake.eizoku.com/blog/
  5. 5. CakePHP 2.1
  6. 6. CakePHP2.1 祝 安定版リリース!! 2012/3/5@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  7. 7. CakePHP2.1 ●JsonView / XMLView の追加 ●View の継承 ●element(FooPlugin.bar); ● 柔軟なイベントシステム ●Callback に優先度の設定 ●深い階層の配列データの保存 ● ex. User – Post - Comment@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  8. 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
  9. 9. Cake2.1Performance
  10. 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/
  11. 11. Cake2 PerformanceBake しただけの画面を対象に計測 @ichikaway http://cake.eizoku.com/blog/
  12. 12. Cake2 Performance● CakePHP1.3.11 ● 29 req/sec● CakePHP2.0.4 ● 40 req/sec● CakePHP2.1.0 ● 38 req/sec @ichikaway http://cake.eizoku.com/blog/
  13. 13. MassAssignmentVulnerability
  14. 14. Mass Assignment vulnerability ●2012/3/5 Github がハックされる ● 脆弱性の Issue を上げたけど無視された ● ハックして自分が RoR の Master repo にコミット するデモを披露 ●Rails の MassAssignmentVlunerability ● Post されたデータをそのまま保存@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  15. 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. 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. 17. Mass Assignment vulnerability ●CakePHP での対応方法 ● SecurityComponent の利用 ● デフォルトでフォーム改竄チェックが有効に ● save データの限定 ● Model::whitelist プロパティで保存可能なフィー ルドを絞る ● Model::save() の第 3 引数で保存可能なフィー ルドを定義@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  18. 18. CakePHP2Tips
  19. 19. CakePHP2 Tips ●Security Component でフォーム改竄チェックをは ずす (CSRF 対応のみ利用したい) // In controller public $components = array( Security => array(validatePost => false), );@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  20. 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. 21. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP1 では自動探索で無問題App/Controller/Admin/AdminController.phpApp/Controller/Admin/FooController.phpApp/Controller/User/PostController.php@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  22. 22. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP2 ではパスを指定// in bootstrap.phpApp::build(array( Controller => array( /app/Contoroller/Admin/, /app/Contoroller/User/ )));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  23. 23. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP2 でも自動探索したい! AutoAppBuild Plugin https://github.com/ichikaway/AutoAppBuild@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  24. 24. CakePHP2 Tips ●コントローラ、モデルを階層管理 ● AutoAppBuild ● app/Plugin/AutoAppBuild に設置// in bootstrap.phpCakePlugin::load(array( AutoAppBuild => array(bootstrap => true)));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  25. 25. StreamWrapper
  26. 26. Motivation ●エレメントの内容を DB に入れて管理したい ● エレメントには html タグ、 php コードが混在 ● ファイルの場合は、 include すれば html/php がレ ンダリングされて出力 ● DB 内のエレメントコンテンツを入れた変数を include したい! <- これどうやるの?@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  27. 27. Stream ●PHP のストリーム ● ファイルの入出力のように様々なプロトコルを透過 的に扱う仕組み ● fopen(http://example.com/foo/bar); ● fopen(file://foo/bar.txt);@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  28. 28. Stream ●PHP のストリーム ● ftp:// ● php:// ● zlib:// ● data:// ● ssh2:// ● php://@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  29. 29. Stream ●PHP のストリーム ● data:// の text/plain で実現できそう$data = hello <?php echo "world"; ?>;include(data://text/plain, .$data);php.ini の下記条件が必須allow_url_fopen = ONallow_url_include = ON@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  30. 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. 31. Stream ●PHP のストリームに必須なメソッド ● url_stat() ● stream_stat() ● stream_open() 変数の読込み ● stream_read()  読込んだ変数を返す ● stream_tell()   読込んだポジション ● stream_eof()   読込み終了判定@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  32. 32. CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper @ichikaway http://cake.eizoku.com/blog/
  33. 33. THANK YOU@cakephper http://cake.eizoku.com/blog/

×