Suche senden
Hochladen
MTで学ぶセキュアプログラミング@MT Tokyo
•
4 gefällt mir
•
2,223 views
純生 野田
Folgen
MT東京 8月 テーマセキュリティのセッション
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 88
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
MT meets PHP
MT meets PHP
純生 野田
MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
純生 野田
Inside Movable Type
Inside Movable Type
純生 野田
やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!
純生 野田
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
WordPressと外部APIとの連携
WordPressと外部APIとの連携
Hidekazu Ishikawa
WordPressで提供するWeb API
WordPressで提供するWeb API
Yuko Toriyama
Gen-Template-for-Perl
Gen-Template-for-Perl
nasneg
Empfohlen
MT meets PHP
MT meets PHP
純生 野田
MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
純生 野田
Inside Movable Type
Inside Movable Type
純生 野田
やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!
純生 野田
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
WordPressと外部APIとの連携
WordPressと外部APIとの連携
Hidekazu Ishikawa
WordPressで提供するWeb API
WordPressで提供するWeb API
Yuko Toriyama
Gen-Template-for-Perl
Gen-Template-for-Perl
nasneg
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
Norito Agetsuma
WordBeach @kurudrive
WordBeach @kurudrive
Hidekazu Ishikawa
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
Yuuki Kuroda
jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tips
yoshikawa_t
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
yoshikawa_t
Jqm20120210
Jqm20120210
cmtomoda
Alpine.jsハンズオン
Alpine.jsハンズオン
AyakaNishiyama
WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan
Ci tutorial
Ci tutorial
Kazuaki Ueda
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t
ロールオーバーのいろいろなやり方
ロールオーバーのいろいろなやり方
silvers ofsilvers
behatで始めるBDD
behatで始めるBDD
Tsutomu Chikuba
ブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用について
Hatsuhito UENO
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
codeal
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
Yujiro Araki
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
Php apocalypse
Php apocalypse
Kiichi Kajiura
deviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirb
Jun Fukaya
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo
Using Dancer
Using Dancer
Yoshihiro Sasaki
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
Weitere ähnliche Inhalte
Was ist angesagt?
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
Norito Agetsuma
WordBeach @kurudrive
WordBeach @kurudrive
Hidekazu Ishikawa
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
Yuuki Kuroda
jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tips
yoshikawa_t
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
yoshikawa_t
Jqm20120210
Jqm20120210
cmtomoda
Alpine.jsハンズオン
Alpine.jsハンズオン
AyakaNishiyama
WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan
Ci tutorial
Ci tutorial
Kazuaki Ueda
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t
ロールオーバーのいろいろなやり方
ロールオーバーのいろいろなやり方
silvers ofsilvers
behatで始めるBDD
behatで始めるBDD
Tsutomu Chikuba
ブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用について
Hatsuhito UENO
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
codeal
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
Yujiro Araki
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
Php apocalypse
Php apocalypse
Kiichi Kajiura
deviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirb
Jun Fukaya
Was ist angesagt?
(19)
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
WordBeach @kurudrive
WordBeach @kurudrive
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
Jqm20120210
Jqm20120210
Alpine.jsハンズオン
Alpine.jsハンズオン
WordPress のキャッシュ機構
WordPress のキャッシュ機構
Ci tutorial
Ci tutorial
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
ロールオーバーのいろいろなやり方
ロールオーバーのいろいろなやり方
behatで始めるBDD
behatで始めるBDD
ブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用について
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
Php apocalypse
Php apocalypse
deviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirb
Ähnlich wie MTで学ぶセキュアプログラミング@MT Tokyo
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo
Using Dancer
Using Dancer
Yoshihiro Sasaki
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro
Ruka 20191212
Ruka 20191212
RukaMenda
Launch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPress
Kite Koga
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
清水樹
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
PHP Object Injection入門
PHP Object Injection入門
Yu Iwama
Okinawa.rb 第2回勉強会
Okinawa.rb 第2回勉強会
Naoki Takaesu
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料
Masafumi Terazono
[JANOG38]Peeringの見える化を自力でやってみた。
[JANOG38]Peeringの見える化を自力でやってみた。
Yutaka Kumamoto
Hack/HHVM 入門
Hack/HHVM 入門
y-uti
数
数
Koichi Taniguchi
最近の PHP の話
最近の PHP の話
y-uti
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose
AWS CLI Conference 2016
AWS CLI Conference 2016
Tomoaki Sakatoku
20090606 わんくま(がる)
20090606 わんくま(がる)
galluda
Ähnlich wie MTで学ぶセキュアプログラミング@MT Tokyo
(20)
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Using Dancer
Using Dancer
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Ruka 20191212
Ruka 20191212
Launch a Web Service in 3 Days Using WordPress
Launch a Web Service in 3 Days Using WordPress
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PHP Object Injection入門
PHP Object Injection入門
Okinawa.rb 第2回勉強会
Okinawa.rb 第2回勉強会
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料
[JANOG38]Peeringの見える化を自力でやってみた。
[JANOG38]Peeringの見える化を自力でやってみた。
Hack/HHVM 入門
Hack/HHVM 入門
数
数
最近の PHP の話
最近の PHP の話
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
AWS CLI Conference 2016
AWS CLI Conference 2016
20090606 わんくま(がる)
20090606 わんくま(がる)
Mehr von 純生 野田
アクセシビリティで企業価値を高める、小さな会社の戦い方
アクセシビリティで企業価値を高める、小さな会社の戦い方
純生 野田
PowerCMS X
PowerCMS X
純生 野田
次世代版 PowerCMS 開発プロジェクトのご紹介
次世代版 PowerCMS 開発プロジェクトのご紹介
純生 野田
PowerCMS Conference
PowerCMS Conference
純生 野田
PowerCMS X
PowerCMS X
純生 野田
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
純生 野田
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
純生 野田
About PowerCMS4.3
About PowerCMS4.3
純生 野田
オーサリングツールとしてのCMSとWebアクセシビリティ
オーサリングツールとしてのCMSとWebアクセシビリティ
純生 野田
Color Testerはどうやって文字の色を拾っているのか?
Color Testerはどうやって文字の色を拾っているのか?
純生 野田
The Next PowerCMS
The Next PowerCMS
純生 野田
The Next PowerCMS
The Next PowerCMS
純生 野田
ウェブアクセシビリティチェックツール開発者の頭ん中
ウェブアクセシビリティチェックツール開発者の頭ん中
純生 野田
PowerCMS 8341 のご紹介
PowerCMS 8341 のご紹介
純生 野田
Something Different for the Best Web Solution!
Something Different for the Best Web Solution!
純生 野田
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
純生 野田
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
純生 野田
Mt seminar hiroshima_public
Mt seminar hiroshima_public
純生 野田
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
純生 野田
Power cms3+azure
Power cms3+azure
純生 野田
Mehr von 純生 野田
(20)
アクセシビリティで企業価値を高める、小さな会社の戦い方
アクセシビリティで企業価値を高める、小さな会社の戦い方
PowerCMS X
PowerCMS X
次世代版 PowerCMS 開発プロジェクトのご紹介
次世代版 PowerCMS 開発プロジェクトのご紹介
PowerCMS Conference
PowerCMS Conference
PowerCMS X
PowerCMS X
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
About PowerCMS4.3
About PowerCMS4.3
オーサリングツールとしてのCMSとWebアクセシビリティ
オーサリングツールとしてのCMSとWebアクセシビリティ
Color Testerはどうやって文字の色を拾っているのか?
Color Testerはどうやって文字の色を拾っているのか?
The Next PowerCMS
The Next PowerCMS
The Next PowerCMS
The Next PowerCMS
ウェブアクセシビリティチェックツール開発者の頭ん中
ウェブアクセシビリティチェックツール開発者の頭ん中
PowerCMS 8341 のご紹介
PowerCMS 8341 のご紹介
Something Different for the Best Web Solution!
Something Different for the Best Web Solution!
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
Mt seminar hiroshima_public
Mt seminar hiroshima_public
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Power cms3+azure
Power cms3+azure
Kürzlich hochgeladen
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Kürzlich hochgeladen
(9)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
MTで学ぶセキュアプログラミング@MT Tokyo
1.
MTで学ぶセキュアプログラミング MT Tokyo 2014
August junnama@alfasado.jp
2.
3.
4.
5.
何のために? •サイトの改ざんを防ぐために •クライアントのセキュリティ要件を 満たすために •被害リスクをできるだけ少なくする ために
6.
何のために、誰が? •セキュリティコンサルタントが •プログラマが •デザイナが
•ディレクターが
7.
何を? •MTMLテンプレートを •Movable Typeそのものを
•MTプラグインを •MTベースのウェブサイトを
8.
イントロダクション <Tweet禁⽌止>
9.
⼤大⼈人の事情につき削除
10.
本題 </Tweet禁⽌止>
11.
例例 : PHPを出⼒力力するテンプレート
12.
PHPを出⼒力力するテンプレート
13.
14.
これは果たして脆弱性か?
15.
何をされたくないか •情報の漏漏洩(権限のない情報 へのアクセス) •権限昇格=権限を越えた操作 •情報の書き換え、削除
16.
性善説か? 性悪説か?
17.
攻撃するのは誰? •悪意の第三者による外部から のアタック •内部犯⾏行行(元社員、コミュニ ティユーザー) •内部(犯⾏行行ではないが)誘発=> 正規のユーザーに踏ませる
18.
そこまで許可した覚えはない。 いや、だって、できるんだ から。。。 Vs.
19.
この場合、どちらが悪いのか? はともかく、セキュリティ監査 では、アウト。 基本、性悪説に基づく。
20.
<MTEntryBody replace=”<?”,””>
21.
完璧に防げるか? (程度度問題→やらないより、まし)
22.
AllowPHPScript 0 PowerCMS(DynamicMTMLでは)...
23.
<MTStripPHP> <MTEntryBody> </MTStripPHP> PowerCMS(DynamicMTMLでは)...
24.
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で評価する
25.
<MTEntryBody replace=”<?”,””> でも、やらないより遥かにまし
26.
主なもの •XSS = Cross
Site Scripting •CSRF = Cross site request forgeries •SQL (OS Command) Injection •Directory traversal
27.
例例 : 検索索結果テンプレート
28.
例例 : 検索索結果テンプレート
29.
例例 : 検索索結果テンプレート
30.
例例 : 検索索結果テンプレート
31.
例例 : 検索索結果テンプレート 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;!
32.
例例 : 検索索結果テンプレート 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;! コード中でエスケープしてる
33.
あまり宜しくない!(きっぱり)
34.
例例 : 検索索結果テンプレート ...! ! sub
context_script {! my ( $ctx, $args, $cond ) = @_;! ! my $search_string! = decode_html($ctx->stash('search_string') package MT::Template::Context::Search;! わざわざ戻してんのかよ!
35.
•どこでエスケープ済みなのか、 わからなくなるぞ? •エンコード済みのクエリを渡さ れたらおかしくならんか?
36.
37.
38.
統⼀一されていないので、 責任が曖昧(忘れちゃう)
39.
わからなくなるから...
40.
わからなくなるから...
41.
42.
43.
⼊入⼒力力値のエスケープは、 テンプレート出⼒力力時に統⼀一
44.
次
45.
$q = $_GET[‘search’];! $sql
= “SELECT FROM mt_entry WHERE! mt_entry.entry_title LIKE % ${q}%” 例例 : PHPによる実装
46.
APIやORマッパを使え
47.
my $app =
MT->instance;! my $q = $app->param(‘search’);! my @entries = MT- >model(‘entry’)! ->load( {! title => { like => $q }, ! } ) 例例 : Perlによる実装
48.
$app = $ctx- >stash(‘bootstrapper’);! $q
= $app->param(‘search’);! $entries = $app->! load(‘entry’,! array( ‘title’ => ! array( ‘like’ => $q ))); 例例 : PHP(DynamicMTML)による実装
49.
var q =
jQuery('#search').value;! var params = {! search: q,! searchFields: "title,body",! };! api.listEntries(siteId, params, function(response) {! if (response.error) {! return;! }! 例例 : JavaScriptによる実装
50.
何かあったらメーカーのせいw
51.
ユーザーの⼊入⼒力力を信⽤用しない! そもそも
52.
次
53.
applications:! cms:! menus:! page:page_foo:! label: Foo! order: 1000! mode:
page_foo! permission: manage_pages! view:! - blog! - website! 例例 : Pluginでのメソッドの拡張
54.
例例 : Pluginでのメソッドの拡張 methods:! page_foo:
$Foo::Foo::CMS:: page_foo! package Foo::CMS! ! sub page_foo {! my $app = shift;! # Do Something! <= え?! }!
55.
例例 : Pluginでのメソッドの拡張 短縮URLでもメールで送り つけてやれ! やっちゃえ!(*)
56.
脱線 : 管理理画⾯面にBasic認証かけても、正規 ユーザー攻撃タイプには意味がないよね。
57.
新規作成 編集 削除 例例 : Pluginで独⾃自オブジェクト
58.
え?
59.
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以外を返すと権限エラー
60.
対策
61.
程度度問題=読み出されるだけより、改ざ んされるほうが い・や・だ。 ちょっと脱線。何故ここだけ対策を? セキュリティにおいて、「程度度問題」 はいつもつきまとう。
62.
但し、前提は事情に よって変わる 例例えば、個⼈人情報。 流流出も改ざんもどっちもどっち
63.
改めて対策
64.
package MT::App::CMS; ホワイトリストではなくブラックリスト なので、不不要なものは塞塞いでおく
65.
GETリクエストは弾く(気休めだが) package Foo::CMS! ! sub page_foo
{! my $app = shift;! if ( $app->request_method ne “POST” ) { ! return $app->permission_denied();! }! #Do Something! } POSTしか受け付けない
66.
⼀一時トークンのチェック package Foo::CMS! ! sub page_foo
{! my $app = shift;! if $app->validate_magic! or return $app->permission_denied();! }! #Do Something! } magic_̲tokenパラメタをチェック
67.
⼀一時トークンのチェック •magic_̲token=アクティブユーザーの session情報 •saveやdelete等の操作ではチェックを! •(但し)magic_̲tokenが無効もしくは空の 時、ID/Password⼊入⼒力力画⾯面を表⽰示
•この時↑deleteメソッド以外ではパラメ タが引き継がれる
68.
⼀一時トークンのチェック •magic_̲token=アクティブユーザーの session情報 •saveやdelete等の操作ではチェックを! •(但し)magic_̲tokenが無効もしくは空の 時、ID/Password⼊入⼒力力画⾯面を表⽰示
•この時↑deleteメソッド以外ではパラメ タが引き継がれる
69.
でも
70.
CSRFとしては、不不⼗十分ではないか? mt.cgi?_̲_̲mode=save&_̲type=foo&title=Title... クリックしちゃだめー! 悪意のURL
71.
改善案 if $app->validate_magic(! { with_confirm! =>
{ message =>! ʻ‘FooをBarしようとしています。 宜しいですか?ʼ’,! icon => ‘CAUTION’! } } )! or return $app->trans_error...! }!
72.
改善案(簡易易指定) if $app->validate_magic! ( ʻ‘FooをBarしようとしています。宜しいですか?ʼ’
)! or return $app->trans_error...! }!
73.
改善案(次に何が起こるのかを明⽰示する) FooをBarしようとして います。宜しいですか?
74.
これからはセキュリティだっ て、UX重視だろ!
75.
話しを戻します
76.
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! } ちゃんと権限をチェック +更更新が必要なものは権限をチェック
77.
例例題
78.
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への処理理}
79.
1.パラメタidに数字以外のものが渡された場合 2.パラメタidにpageオブジェクトではなく entryオブジェクトのidが渡された場合 3.パラメタidが空の場合
4.パラメタidに現在のblogに属さないentry/ pageのidが渡された場合 考えておかなければならないケース
80.
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が渡されたら? てか、テンプレート エンジン使え!
81.
添削後
82.
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に属するもので ないかチェック(※) ※システムスコープやウェブサイトスコープの場合はあり得るケース てか、テンプレート エンジン使え!
83.
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でチェック コールバックをすり 抜けないようにする
84.
⼀一気に難易易度度あがりましたが...
85.
結論論
86.
まとめ •セキュアプログラミングは性悪説 •それでも程度度問題。何をやられない ようにするか。何を優先するか(何 は、あきらめるか) •セキュリティにもUXの視点が必要
87.
まとめ •ユーザーの⼊入⼒力力を信⽤用しない •エスケープは出⼒力力時に統⼀一する •SQLを⾃自前で書くな。API使え
•正規ユーザー攻撃型改ざん対策のた めに、⼀一時トークンを使う
88.
ありがとうございました。
Jetzt herunterladen