MTで学ぶセキュアプログラミング@MT Tokyo

純生 野田
純生 野田Executive Director at アルファサード
MTで学ぶセキュアプログラミング
MT  Tokyo  2014  August
junnama@alfasado.jp
MTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT Tokyo
何のために?
•サイトの改ざんを防ぐために  
•クライアントのセキュリティ要件を
満たすために  
•被害リスクをできるだけ少なくする
ために
何のために、誰が?
•セキュリティコンサルタントが  
•プログラマが  
•デザイナが  
•ディレクターが
何を?
•MTMLテンプレートを  
•Movable  Typeそのものを  
•MTプラグインを  
•MTベースのウェブサイトを
イントロダクション
<Tweet禁⽌止>
⼤大⼈人の事情につき削除
本題
</Tweet禁⽌止>
例例  :  PHPを出⼒力力するテンプレート
PHPを出⼒力力するテンプレート
MTで学ぶセキュアプログラミング@MT Tokyo
これは果たして脆弱性か?
何をされたくないか
•情報の漏漏洩(権限のない情報
へのアクセス)  
•権限昇格=権限を越えた操作  
•情報の書き換え、削除
性善説か?  性悪説か?
攻撃するのは誰?
•悪意の第三者による外部から
のアタック  
•内部犯⾏行行(元社員、コミュニ
ティユーザー)  
•内部(犯⾏行行ではないが)誘発=>
正規のユーザーに踏ませる
そこまで許可した覚えはない。
いや、だって、できるんだ
から。。。
Vs.
この場合、どちらが悪いのか?
はともかく、セキュリティ監査
では、アウト。
基本、性悪説に基づく。
<MTEntryBody
replace=”<?”,””>
完璧に防げるか?  
(程度度問題→やらないより、まし)
AllowPHPScript 0
PowerCMS(DynamicMTMLでは)...
<MTStripPHP>
<MTEntryBody>
</MTStripPHP>
PowerCMS(DynamicMTMLでは)...
function strip_php( $source ) {!
$tokens = token_get_all( $source );!
$res = '';!
$inphp = FALSE;!
foreach ( $tokens as $token ) {!
if ( is_string( $token ) ) {!
$token = array( '', $token );!
}!
list( $id, $str ) = $token;!
if (! $inphp ) {!
if ( $id === T_OPEN_TAG or $id == T_OPEN
$inphp = TRUE;!
} else {!
$res .= $str;!
}!
厳密には、PHPはPHPで評価する
<MTEntryBody
replace=”<?”,””>
でも、やらないより遥かにまし
主なもの
•XSS  =  Cross  Site  Scripting  
•CSRF  =  Cross  site  request  
forgeries  
•SQL  (OS  Command)  Injection  
•Directory  traversal
例例  :  検索索結果テンプレート
例例  :  検索索結果テンプレート
例例  :  検索索結果テンプレート
例例  :  検索索結果テンプレート
例例  :  検索索結果テンプレート
sub load_core_tags {!
require MT::Template::Context;!
return {!
function => {!
SearchString => &_hdlr_search_string,!
...!
!
sub _hdlr_search_string!
{ $_[0]->stash('search_string') || '' }
package MT::Template::Context::Search;!
例例  :  検索索結果テンプレート
sub prepare_context {!
my $app = shift;!
my $q = $app->param;!
...!
if ( my $str = $app->{search_string} ) {!
$ctx->stash(!
'search_string', encode_html($str) );!
}
package MT::App::Search;!
コード中でエスケープしてる
あまり宜しくない!(きっぱり)
例例  :  検索索結果テンプレート
...!
!
sub context_script {!
my ( $ctx, $args, $cond ) = @_;!
!
my $search_string!
= decode_html($ctx->stash('search_string')
package MT::Template::Context::Search;!
わざわざ戻してんのかよ!
•どこでエスケープ済みなのか、
わからなくなるぞ?  
•エンコード済みのクエリを渡さ
れたらおかしくならんか?
MTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT Tokyo
統⼀一されていないので、
責任が曖昧(忘れちゃう)
わからなくなるから...
わからなくなるから...
MTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT Tokyo
⼊入⼒力力値のエスケープは、  
テンプレート出⼒力力時に統⼀一
次
$q = $_GET[‘search’];!
$sql = “SELECT FROM
mt_entry WHERE!
mt_entry.entry_title LIKE %
${q}%”
例例  :  PHPによる実装
APIやORマッパを使え
my $app = MT->instance;!
my $q = $app->param(‘search’);!
my @entries = MT-
>model(‘entry’)!
->load( {!
title => { like => $q }, !
} )
例例  :  Perlによる実装
$app = $ctx-
>stash(‘bootstrapper’);!
$q = $app->param(‘search’);!
$entries = $app->!
load(‘entry’,!
array( ‘title’ => !
array( ‘like’ => $q )));
例例  :  PHP(DynamicMTML)による実装
var q = jQuery('#search').value;!
var params = {!
search: q,!
searchFields: "title,body",!
};!
api.listEntries(siteId, params,
function(response) {!
if (response.error) {!
return;!
}!
例例  :  JavaScriptによる実装
何かあったらメーカーのせいw
ユーザーの⼊入⼒力力を信⽤用しない!
そもそも
次
applications:!
cms:!
menus:!
page:page_foo:!
label: Foo!
order: 1000!
mode: page_foo!
permission: manage_pages!
view:!
- blog!
- website!
例例  :  Pluginでのメソッドの拡張
例例  :  Pluginでのメソッドの拡張
methods:!
page_foo: $Foo::Foo::CMS:: page_foo!
package Foo::CMS!
!
sub page_foo {!
my $app = shift;!
# Do Something! <= え?!
}!
例例  :  Pluginでのメソッドの拡張
短縮URLでもメールで送り
つけてやれ!
やっちゃえ!(*)
脱線  :  管理理画⾯面にBasic認証かけても、正規
ユーザー攻撃タイプには意味がないよね。
新規作成
編集
削除
例例  :  Pluginで独⾃自オブジェクト
え?
sub  save  {  
        my  $app    =  shift;  
        my  $q        =  $app-‐‑‒>param;  
        my  $type  =  $q-‐‑‒>param('_̲type');  
        my  $save_̲mode  =  'save_̲'  .  $type;  
        if  (  my  $hdlrs  =  $app-‐‑‒>handlers_̲for_̲mode($save_̲mode)  )  {  
                return  $app-‐‑‒>forward($save_̲mode);}  
        my  $id  =  $q-‐‑‒>param('id');  
        $app-‐‑‒>validate_̲magic()  or  return;  
        my  $author  =  $app-‐‑‒>user;  
        my  $perms  =  $app-‐‑‒>permissions;  
        if  (  !$author-‐‑‒>is_̲superuser  )  {  
                if  (  (  $type  ne  'author'  )  &&  (  $type  ne  'template'  )  ){  
                        return  return  $app-‐‑‒>permission_̲denied()  if  !$perms  &&  $id;  
                }  
                $app-‐‑‒>run_̲callbacks(  'cms_̲save_̲permission_̲filter.'  .  $type,  
                $app,  $id  )  ||  return  $app-‐‑‒>permission_̲denied();  
        }  
#以下、保存
MT::CMS::Common::save(⼀一部省省略略)
magic_̲tokenを
チェック
save_̲fooメソッドが定義され
ているときはそちらへforward
システム管理理者の場
合、ここはスルー
コールバックcms_̲save_̲permission_̲filter.fooが1以外を返すと権限エラー
対策
程度度問題=読み出されるだけより、改ざ
んされるほうが  い・や・だ。
ちょっと脱線。何故ここだけ対策を?
セキュリティにおいて、「程度度問題」
はいつもつきまとう。
但し、前提は事情に
よって変わる
例例えば、個⼈人情報。  
流流出も改ざんもどっちもどっち
改めて対策
package  MT::App::CMS;
ホワイトリストではなくブラックリスト
なので、不不要なものは塞塞いでおく
GETリクエストは弾く(気休めだが)
package Foo::CMS!
!
sub page_foo {!
my $app = shift;!
if ( $app->request_method ne “POST” ) { !
return $app->permission_denied();!
}!
#Do Something!
}
POSTしか受け付けない
⼀一時トークンのチェック
package Foo::CMS!
!
sub page_foo {!
my $app = shift;!
if $app->validate_magic!
or return $app->permission_denied();!
}!
#Do Something!
}
magic_̲tokenパラメタをチェック
⼀一時トークンのチェック
•magic_̲token=アクティブユーザーの
session情報  
•saveやdelete等の操作ではチェックを!  
•(但し)magic_̲tokenが無効もしくは空の
時、ID/Password⼊入⼒力力画⾯面を表⽰示  
•この時↑deleteメソッド以外ではパラメ
タが引き継がれる
⼀一時トークンのチェック
•magic_̲token=アクティブユーザーの
session情報  
•saveやdelete等の操作ではチェックを!  
•(但し)magic_̲tokenが無効もしくは空の
時、ID/Password⼊入⼒力力画⾯面を表⽰示  
•この時↑deleteメソッド以外ではパラメ
タが引き継がれる
でも
CSRFとしては、不不⼗十分ではないか?
mt.cgi?_̲_̲mode=save&_̲type=foo&title=Title...
クリックしちゃだめー!
悪意のURL
改善案
if $app->validate_magic(!
{ with_confirm!
=> { message =>!
ʻ‘FooをBarしようとしています。  
                                                    宜しいですか?ʼ’,!
icon => ‘CAUTION’!
} } )!
or return $app->trans_error...!
}!
改善案(簡易易指定)
if $app->validate_magic!
( ʻ‘FooをBarしようとしています。宜しいですか?ʼ’ )!
or return $app->trans_error...!
}!
改善案(次に何が起こるのかを明⽰示する)
FooをBarしようとして  
います。宜しいですか?
これからはセキュリティだっ
て、UX重視だろ!
話しを戻します
package Foo::CMS!
!
sub page_foo {!
my $app = shift;!
my $perms = $app->permissions!
or return $app->permission_denied();!
return $app->permission_denied()!
unless $perms!
->can_do('edit_all_pages');!
#Do Something!
}
ちゃんと権限をチェック
+更更新が必要なものは権限をチェック
例例題
sub  some_̲action{  
        my  $app=  shift;  
        require  MT::Page;  
        my  $blog  =  app-‐‑‒>blog;  
        my  $page  =  MT::Page-‐‑‒>load(  $app-‐‑‒>param(  'id'  )  );  
        if  (!  $page  )  {  
                return  $app-‐‑‒>translate(  'Invalid  Page  ID:[_̲1].',  $app-‐‑‒>param(  'id'  )  );  
        }  
        my  $perm  =  $app-‐‑‒>user-‐‑‒>is_̲superuser;  
        if  (!  $perm  )  {  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲administer_̲website
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲administer_̲blog  
                                            unless  $perm;  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲manage_̲pages  
                unless  $perm;  
        }  
        if  (!  $perm  )  {  
                return  $app-‐‑‒>translate(  'Permission  denied.'  );  
        }  
        #  この後、$pageへの処理理}
1.パラメタidに数字以外のものが渡された場合  
2.パラメタidにpageオブジェクトではなく
entryオブジェクトのidが渡された場合  
3.パラメタidが空の場合  
4.パラメタidに現在のblogに属さないentry/
pageのidが渡された場合
考えておかなければならないケース
sub  some_̲action{  
        my  $app=  shift;  
        require  MT::Page;  
        my  $blog  =  app-‐‑‒>blog;  
        my  $page  =  MT::Page-‐‑‒>load(  $app-‐‑‒>param(  'id'  )  );  
        if  (!  $page  )  {  
                return  $app-‐‑‒>translate(  'Invalid  Page  ID:[_̲1].',  $app-‐‑‒>param(  'id'  )  );  
        }  
        my  $perm  =  $app-‐‑‒>user-‐‑‒>is_̲superuser;  
        if  (!  $perm  )  {  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲administer_̲website
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲administer_̲blog  
                                            unless  $perm;  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $blog-‐‑‒>id  )-‐‑‒>can_̲manage_̲pages  
                unless  $perm;  
        }  
        if  (!  $perm  )  {  
                return  $app-‐‑‒>translate(  'Permission  denied.'  );  
        }  
        #  この後、$pageへの処理理}
mt.cgi?_̲_̲mode=some_̲action&id=
<script>alert('do')</script>
id=1&blog_̲id=3  
↑  
id:1のpageのblog_̲id
が3である保証は?
idが空だったら?もしくはEntryのIDが渡されたら?
てか、テンプレート
エンジン使え!
添削後
sub  some_̲action  {  
        my  $app  =  shift;  
        $app-‐‑‒>validate_̲magic(  ʻ‘FooをBarしてもよろしいですか?ʼ’  )  or  
                return  $app-‐‑‒>trans_̲error(  'Permission  denied.'  );  
        require  MT::Page;  
        my  $page;  
        if  (!  $app-‐‑‒>param(  'id'  )  ||  
                (!  $page  =  MT::Page-‐‑‒>load(  $app-‐‑‒>param(  'id'  )  )  )  {  
                return  $app-‐‑‒>trans_̲error(  'Invalid  Page  ID:'[_̲1]'',    
                                                            MT::Util::encode_̲html(  $app-‐‑‒>param(  'id'  )  )  );  
        }  
        if  (  $page-‐‑‒>class  ne  'page'  )  {  
                return  $app-‐‑‒>trans_̲error(  'Invalid  Class:'[_̲1]'',  $page-‐‑‒>class  );  
        }  
        #  permission  check  case  1  
        if  (  $app-‐‑‒>blog-‐‑‒>id  !=  $page-‐‑‒>blog_̲id  )  {  
                return  $app-‐‑‒>trans_̲error(  'Invalid  BlogID:'[_̲1]'',    
                                                            MT::Util::encode_̲html(  $app-‐‑‒>blog-‐‑‒>id  )  );  
        }  #  続く  
操作を伴う場合最初にmagic_̲tokenをチェック
渡された値をそのまま表⽰示する場合、エスケープ
Entryでないかチェック
違うブログIDに属するもので
ないかチェック(※)
※システムスコープやウェブサイトスコープの場合はあり得るケース
てか、テンプレート
エンジン使え!
       if  (!  $app-‐‑‒>can_̲do(  'manage_̲pages'  )  )  {  
                return  $app-‐‑‒>trans_̲error(  'Permission  denied.'  );  
        }  
        #  or  case  2  
        my  $perm  =  $app-‐‑‒>user-‐‑‒>is_̲superuser;    
        if  (!  $perm  )  {  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $page-‐‑‒>blog_̲id  )-‐‑‒>  
can_̲administer_̲website;  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $page-‐‑‒>blog_̲id  )-‐‑‒>  
can_̲administer_̲blog  unless  $perm;  
                $perm  =  $app-‐‑‒>user-‐‑‒>permissions(  $page-‐‑‒>blog_̲id  )-‐‑‒>  
can_̲manage_̲pages  unless  $perm;  
        }  
        if  (!  $perm  )  {  
                return  $app-‐‑‒>trans_̲error(  'Permission  denied.'  );  
        }  
        if  (!  $app-‐‑‒>run_̲callbacks(  'cms_̲save_̲permission_̲filter.page'  $app,  $page  )  {
                return  $app-‐‑‒>trans_̲error(  'Permission  denied.'  );  
        }  
        #  Do  Something.}
$blog-‐‑‒>idではなく$page-‐‑‒>blog_̲idでチェック
コールバックをすり
抜けないようにする
⼀一気に難易易度度あがりましたが...
結論論
まとめ
•セキュアプログラミングは性悪説  
•それでも程度度問題。何をやられない
ようにするか。何を優先するか(何
は、あきらめるか)  
•セキュリティにもUXの視点が必要
まとめ
•ユーザーの⼊入⼒力力を信⽤用しない  
•エスケープは出⼒力力時に統⼀一する  
•SQLを⾃自前で書くな。API使え  
•正規ユーザー攻撃型改ざん対策のた
めに、⼀一時トークンを使う
ありがとうございました。
1 of 88

Recommended

MT meets PHP by
MT meets PHPMT meets PHP
MT meets PHP純生 野田
10K views56 slides
MT meets PHP - PHP conference Kansai 2013 by
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013純生 野田
18.3K views62 slides
Inside Movable Type by
Inside Movable TypeInside Movable Type
Inside Movable Type純生 野田
6.6K views72 slides
やはりお前らのMTMLは間違っている! by
やはりお前らのMTMLは間違っている!やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!純生 野田
11.7K views71 slides
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~ by
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
9.1K views37 slides
WordPressと外部APIとの連携 by
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
34.1K views66 slides

More Related Content

What's hot

プロになるためのJavaScript入門読書会 レジュメ by
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメNorito Agetsuma
1.2K views76 slides
WordBeach @kurudrive by
WordBeach @kurudriveWordBeach @kurudrive
WordBeach @kurudriveHidekazu Ishikawa
3K views44 slides
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro by
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocroYuuki Kuroda
1.2K views32 slides
jQuery Mobile 1.2 最新情報 & Tips by
jQuery Mobile 1.2 最新情報 & TipsjQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tipsyoshikawa_t
51.1K views63 slides
jQuery Mobile 1.3 最新情報 by
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報yoshikawa_t
14.4K views44 slides
Jqm20120210 by
Jqm20120210Jqm20120210
Jqm20120210cmtomoda
1.2K views55 slides

What's hot(19)

プロになるためのJavaScript入門読書会 レジュメ by Norito Agetsuma
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
Norito Agetsuma1.2K views
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro by Yuuki Kuroda
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
Yuuki Kuroda1.2K views
jQuery Mobile 1.2 最新情報 & Tips by yoshikawa_t
jQuery Mobile 1.2 最新情報 & TipsjQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tips
yoshikawa_t51.1K views
jQuery Mobile 1.3 最新情報 by yoshikawa_t
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
yoshikawa_t14.4K views
Jqm20120210 by cmtomoda
Jqm20120210Jqm20120210
Jqm20120210
cmtomoda1.2K views
WordPress のキャッシュ機構 by katanyan
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan12.3K views
jQuery Mobile 最新情報 & Tips by yoshikawa_t
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t4.9K views
ロールオーバーのいろいろなやり方 by silvers ofsilvers
ロールオーバーのいろいろなやり方ロールオーバーのいろいろなやり方
ロールオーバーのいろいろなやり方
silvers ofsilvers8.9K views
ブログメディアにおけるData APIの活用について by Hatsuhito UENO
ブログメディアにおけるData APIの活用についてブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用について
Hatsuhito UENO1.4K views
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料 by codeal
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
codeal1.6K views
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type by Yujiro Araki
MTDDC Meetup Tokyo 2011:もっとディープにMovable TypeMTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
Yujiro Araki6K views
40分濃縮 PHP classの教室 by Yusuke Ando
40分濃縮 PHP classの教室40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando28.5K views
Mojoliciousをウェブ制作現場で使ってみてる by jamadam
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam4.9K views
deviseを利用した認証について@Minamirb by Jun Fukaya
deviseを利用した認証について@Minamirbdeviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirb
Jun Fukaya4.1K views

Similar to MTで学ぶセキュアプログラミング@MT Tokyo

Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] by
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] norry_gogo
199 views1 slide
Using Dancer by
Using DancerUsing Dancer
Using DancerYoshihiro Sasaki
5.3K views79 slides
GMO TECHNOLOGY BOOT CAMP2015(PHP編) by
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)Arata Fujimura
1.7K views112 slides
俺のフックがこんなに簡単なわけがない。 by
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。Hishikawa Takuro
3.3K views64 slides
Ruka 20191212 by
Ruka 20191212Ruka 20191212
Ruka 20191212RukaMenda
19 views20 slides
Launch a Web Service in 3 Days Using WordPress by
Launch a Web Service in 3 Days Using WordPressLaunch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPressKite Koga
81.9K views43 slides

Similar to MTで学ぶセキュアプログラミング@MT Tokyo(20)

Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] by norry_gogo
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo199 views
GMO TECHNOLOGY BOOT CAMP2015(PHP編) by Arata Fujimura
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura1.7K views
俺のフックがこんなに簡単なわけがない。 by Hishikawa Takuro
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro3.3K views
Ruka 20191212 by RukaMenda
Ruka 20191212Ruka 20191212
Ruka 20191212
RukaMenda19 views
Launch a Web Service in 3 Days Using WordPress by Kite Koga
Launch a Web Service in 3 Days Using WordPressLaunch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPress
Kite Koga81.9K views
omoon.org の裏側 〜FuelPHP の task 活用例〜 by Sotaro Omura
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura10K views
Zend Frameworkで始める携帯サイト by 清水樹
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
清水樹2K views
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012 by Yusuke Ando
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando4.6K views
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方 by kwatch
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch34K views
PHP Object Injection入門 by Yu Iwama
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
Yu Iwama253 views
Okinawa.rb 第2回勉強会 by Naoki Takaesu
Okinawa.rb 第2回勉強会Okinawa.rb 第2回勉強会
Okinawa.rb 第2回勉強会
Naoki Takaesu1.8K views
日本Androidの会 中国支部資料 by Masafumi Terazono
日本Androidの会 中国支部資料日本Androidの会 中国支部資料
日本Androidの会 中国支部資料
Masafumi Terazono3.9K views
[JANOG38]Peeringの見える化を自力でやってみた。 by Yutaka Kumamoto
[JANOG38]Peeringの見える化を自力でやってみた。[JANOG38]Peeringの見える化を自力でやってみた。
[JANOG38]Peeringの見える化を自力でやってみた。
Yutaka Kumamoto315 views
Hack/HHVM 入門 by y-uti
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
y-uti8.4K views
最近の PHP の話 by y-uti
最近の PHP の話最近の PHP の話
最近の PHP の話
y-uti3.2K views
CMSとPerlで遊ぼう by Daiki Ichinose
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose1.9K views
20090606 わんくま(がる) by galluda
20090606 わんくま(がる)20090606 わんくま(がる)
20090606 わんくま(がる)
galluda824 views

More from 純生 野田

アクセシビリティで企業価値を高める、小さな会社の戦い方 by
アクセシビリティで企業価値を高める、小さな会社の戦い方アクセシビリティで企業価値を高める、小さな会社の戦い方
アクセシビリティで企業価値を高める、小さな会社の戦い方純生 野田
1.5K views66 slides
PowerCMS X by
PowerCMS XPowerCMS X
PowerCMS X純生 野田
1.2K views80 slides
次世代版 PowerCMS 開発プロジェクトのご紹介 by
次世代版 PowerCMS 開発プロジェクトのご紹介次世代版 PowerCMS 開発プロジェクトのご紹介
次世代版 PowerCMS 開発プロジェクトのご紹介純生 野田
1.8K views126 slides
PowerCMS Conference by
PowerCMS ConferencePowerCMS Conference
PowerCMS Conference純生 野田
413 views22 slides
PowerCMS X by
PowerCMS XPowerCMS X
PowerCMS X純生 野田
2.4K views117 slides
アルファサード株式会社はなぜ アクセシビリティに取り組むのか by
アルファサード株式会社はなぜ アクセシビリティに取り組むのかアルファサード株式会社はなぜ アクセシビリティに取り組むのか
アルファサード株式会社はなぜ アクセシビリティに取り組むのか純生 野田
3.4K views40 slides

More from 純生 野田(20)

アクセシビリティで企業価値を高める、小さな会社の戦い方 by 純生 野田
アクセシビリティで企業価値を高める、小さな会社の戦い方アクセシビリティで企業価値を高める、小さな会社の戦い方
アクセシビリティで企業価値を高める、小さな会社の戦い方
純生 野田1.5K views
次世代版 PowerCMS 開発プロジェクトのご紹介 by 純生 野田
次世代版 PowerCMS 開発プロジェクトのご紹介次世代版 PowerCMS 開発プロジェクトのご紹介
次世代版 PowerCMS 開発プロジェクトのご紹介
純生 野田1.8K views
アルファサード株式会社はなぜ アクセシビリティに取り組むのか by 純生 野田
アルファサード株式会社はなぜ アクセシビリティに取り組むのかアルファサード株式会社はなぜ アクセシビリティに取り組むのか
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
純生 野田3.4K views
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用 by 純生 野田
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
純生 野田2K views
オーサリングツールとしてのCMSとWebアクセシビリティ by 純生 野田
オーサリングツールとしてのCMSとWebアクセシビリティオーサリングツールとしてのCMSとWebアクセシビリティ
オーサリングツールとしてのCMSとWebアクセシビリティ
純生 野田1.9K views
Color Testerはどうやって文字の色を拾っているのか? by 純生 野田
Color Testerはどうやって文字の色を拾っているのか?Color Testerはどうやって文字の色を拾っているのか?
Color Testerはどうやって文字の色を拾っているのか?
純生 野田2.5K views
ウェブアクセシビリティチェックツール開発者の頭ん中 by 純生 野田
ウェブアクセシビリティチェックツール開発者の頭ん中ウェブアクセシビリティチェックツール開発者の頭ん中
ウェブアクセシビリティチェックツール開発者の頭ん中
純生 野田1.4K views
PowerCMS 8341 のご紹介 by 純生 野田
PowerCMS 8341 のご紹介PowerCMS 8341 のご紹介
PowerCMS 8341 のご紹介
純生 野田3.3K views
Something Different for the Best Web Solution! by 純生 野田
Something Different for the Best Web Solution!Something Different for the Best Web Solution!
Something Different for the Best Web Solution!
純生 野田13.9K views
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化 by 純生 野田
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
純生 野田2.9K views
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング by 純生 野田
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
純生 野田3K views
Mt seminar hiroshima_public by 純生 野田
Mt seminar hiroshima_publicMt seminar hiroshima_public
Mt seminar hiroshima_public
純生 野田1.7K views
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会) by 純生 野田
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
純生 野田3K views

Recently uploaded

JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
60 views26 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
335 views13 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
SNMPセキュリティ超入門 by
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
355 views15 slides

Recently uploaded(11)

SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views

MTで学ぶセキュアプログラミング@MT Tokyo