SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
ヤザマキ

春の Cake 祭り

      2012/3/7
   CakePHP study

   Yasushi Ichikawa
I am
Yasushi Ichikawa




@cakephper
http://d.hatena.ne.jp/cakephper
Services
KANAEL
http://kanael.net

ATND::Payment
http://atndpay.eizoku.com

Tipshare
http://tipshare.info
CakePHP2.1 の紹介
Cake2.1 Performance
Mass Assignment
CakePHP Tips
Stream 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 に優先度の設定
 ●深い階層の配列データの保存
     ●   ex. User – Post - Comment


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
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
Cake2.1
Performance
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/
Cake2 Performance
Bake しただけの画面を対象に計測




  @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   http://cake.eizoku.com/blog/
Mass
Assignment
Vulnerability
Mass Assignment vulnerability

 ●2012/3/5 Github がハックされる
     ●   脆弱性の Issue を上げたけど無視された
     ●   ハックして自分が RoR の Master repo にコミット
         するデモを披露
 ●Rails の MassAssignmentVlunerability
         ●   Post されたデータをそのまま保存


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Mass Assignment vulnerability

 // In controller
 $this->User->save($this->data);



 // PostData
 data[User][name] = 'Ichi'



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
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
Mass Assignment vulnerability
 ●CakePHP での対応方法
     ●   SecurityComponent の利用
         ●   デフォルトでフォーム改竄チェックが有効に
     ●   save データの限定
         ●   Model::whitelist プロパティで保存可能なフィー
             ルドを絞る
         ●   Model::save() の第 3 引数で保存可能なフィー
             ルドを定義
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
CakePHP2
Tips
CakePHP2 Tips

 ●Security Component でフォーム改竄チェックをは
 ずす (CSRF 対応のみ利用したい)

 // In controller
 public $components = array(
     'Security' => array('validatePost' => false),
 );


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
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
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
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
CakePHP2 Tips

 ●
  コントローラ、モデルを階層管理
     ●   CakePHP2 でも自動探索したい!


     AutoAppBuild Plugin
     https://github.com/ichikaway/AutoAppBuild




@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
CakePHP2 Tips
 ●コントローラ、モデルを階層管理
     ●   AutoAppBuild
     ●   app/Plugin/AutoAppBuild に設置

// in bootstrap.php
CakePlugin::load(array(
    'AutoAppBuild' => array('bootstrap' => true)
));


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Stream
Wrapper
Motivation
 ●エレメントの内容を DB に入れて管理したい
     ●   エレメントには html タグ、 php コードが混在
     ●   ファイルの場合は、 include すれば html/php がレ
         ンダリングされて出力
     ●   DB 内のエレメントコンテンツを入れた変数を
         include したい! <- これどうやるの?




@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Stream
 ●PHP のストリーム
     ●   ファイルの入出力のように様々なプロトコルを透過
         的に扱う仕組み
     ●   fopen('http://example.com/foo/bar');
     ●   fopen('file://foo/bar.txt');




@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Stream
 ●PHP のストリーム
     ●   ftp://
     ●   php://
     ●   zlib://
     ●   data://
     ●   ssh2://
     ●   php://


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
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
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
Stream
 ●PHP のストリームに必須なメソッド
     ●   url_stat()
     ●   stream_stat()
     ●   stream_open() 変数の読込み
     ●   stream_read()  読込んだ変数を返す
     ●   stream_tell()   読込んだポジション
     ●   stream_eof()   読込み終了判定


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
CakePHP2.1 の紹介
Cake2.1 Performance
Mass Assignment
CakePHP Tips
Stream Wrapper

   @ichikaway   http://cake.eizoku.com/blog/
THANK YOU


@cakephper   http://cake.eizoku.com/blog/

Mais conteúdo relacionado

Mais procurados

NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月suno88
 
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編Toshimichi Suekane
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境regret raym
 
Shibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced MogilefsShibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced Mogilefsguest172cfb
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Taku Unno
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
20111006 cakephp2.0 study
20111006 cakephp2.0 study20111006 cakephp2.0 study
20111006 cakephp2.0 studygusagi
 
Jenkinsプラグイン開発
Jenkinsプラグイン開発Jenkinsプラグイン開発
Jenkinsプラグイン開発Takahisa Wada
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)Toshimichi Suekane
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5ichikaway
 
今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」Soudai Sone
 
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようAlfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようTomomi Kawabe
 
NetBeans plugin for wordpress
NetBeans plugin for wordpressNetBeans plugin for wordpress
NetBeans plugin for wordpressJunichi Yamamoto
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Cakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritanceCakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritanceKohji Tanaka
 

Mais procurados (20)

NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境
 
Shibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced MogilefsShibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced Mogilefs
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
20111006 cakephp2.0 study
20111006 cakephp2.0 study20111006 cakephp2.0 study
20111006 cakephp2.0 study
 
Jenkinsプラグイン開発
Jenkinsプラグイン開発Jenkinsプラグイン開発
Jenkinsプラグイン開発
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」
 
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようAlfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
 
NetBeans plugin for wordpress
NetBeans plugin for wordpressNetBeans plugin for wordpress
NetBeans plugin for wordpress
 
Fuelphp1.8を始めたい
Fuelphp1.8を始めたいFuelphp1.8を始めたい
Fuelphp1.8を始めたい
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Cakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritanceCakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritance
 

Semelhante a 20120307 CakePHP Study in Tokyo

CakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shellCakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shellichikaway
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4ichikaway
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能柴田 篤志
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 ichikaway
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1Fumito Mizuno
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介Naoto Mawatari
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 

Semelhante a 20120307 CakePHP Study in Tokyo (20)

CakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shellCakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shell
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
 
CakeにTestがやってきた
CakeにTestがやってきたCakeにTestがやってきた
CakeにTestがやってきた
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 

Mais de ichikaway

forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編ichikaway
 
Understanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES EmulatorUnderstanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES Emulatorichikaway
 
VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話ichikaway
 
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019ichikaway
 
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019ichikaway
 
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy 現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy ichikaway
 
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料ichikaway
 
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年ichikaway
 
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは  VAddyミートアップvol3_20160629VAaddyとは  VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629ichikaway
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015ichikaway
 
脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuokaichikaway
 
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!ichikaway
 
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!ichikaway
 
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LTichikaway
 
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2ichikaway
 
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dialCtf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dialichikaway
 
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaVAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaichikaway
 
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテストJenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテストichikaway
 
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料ichikaway
 
VAddy at LL Diver LT
VAddy at LL Diver LTVAddy at LL Diver LT
VAddy at LL Diver LTichikaway
 

Mais de ichikaway (20)

forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編
 
Understanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES EmulatorUnderstanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES Emulator
 
VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話
 
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
 
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
 
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy 現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy
 
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
 
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
 
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは  VAddyミートアップvol3_20160629VAaddyとは  VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 
脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka
 
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!
 
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
 
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
 
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
 
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dialCtf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dial
 
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaVAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
 
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテストJenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテスト
 
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
 
VAddy at LL Diver LT
VAddy at LL Diver LTVAddy at LL Diver LT
VAddy at LL Diver LT
 

20120307 CakePHP Study in Tokyo

  • 1. ヤザマキ 春の Cake 祭り 2012/3/7 CakePHP study Yasushi Ichikawa
  • 4. CakePHP2.1 の紹介 Cake2.1 Performance Mass Assignment CakePHP Tips Stream Wrapper @ichikaway http://cake.eizoku.com/blog/
  • 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/
  • 11. Cake2 Performance Bake しただけの画面を対象に計測 @ichikaway http://cake.eizoku.com/blog/
  • 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/
  • 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
  • 32. CakePHP2.1 の紹介 Cake2.1 Performance Mass Assignment CakePHP Tips Stream Wrapper @ichikaway http://cake.eizoku.com/blog/
  • 33. THANK YOU @cakephper http://cake.eizoku.com/blog/