Enviar pesquisa
Carregar
Rails4 security
•
10 gostaram
•
3,325 visualizações
Yasuo Ohgaki
Seguir
岡山Ruby会議02(2013)の講演資料
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 52
Baixar agora
Baixar para ler offline
Recomendados
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
ichikaway
すぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTips
yoshinori matsumoto
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
ichikaway
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
How to test code with mruby
How to test code with mruby
Hiroshi SHIBATA
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
ichikaway
Recomendados
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
ichikaway
すぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTips
yoshinori matsumoto
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
ichikaway
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
How to test code with mruby
How to test code with mruby
Hiroshi SHIBATA
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
ichikaway
introduction to jsrsasign
introduction to jsrsasign
Kenji Urushima
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
ichikaway
ビットコインと社会 ─ ビットコインだけでは何も変わらない
ビットコインと社会 ─ ビットコインだけでは何も変わらない
Kenji Saito
脆弱性診断研究会 第34回セミナー資料
脆弱性診断研究会 第34回セミナー資料
脆弱性診断研究会
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Koichiro Sumi
OpenWhisk Serverless への期待
OpenWhisk Serverless への期待
Hideaki Tokida
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
Kenji Urushima
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Kenji Urushima
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
Kenji Saito
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
zaki4649
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
Kenji Saito
ブロックチェーン連続講義 第7回 スマートコントラクト
ブロックチェーン連続講義 第7回 スマートコントラクト
Kenji Saito
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Yuki Anzai
Bitcoinを技術的に理解する
Bitcoinを技術的に理解する
Kenji Urushima
AndroidLint #DroidKaigi
AndroidLint #DroidKaigi
Yukiya Nakagawa
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
SFDG ROOKIES
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
Mais conteúdo relacionado
Destaque
introduction to jsrsasign
introduction to jsrsasign
Kenji Urushima
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
ichikaway
ビットコインと社会 ─ ビットコインだけでは何も変わらない
ビットコインと社会 ─ ビットコインだけでは何も変わらない
Kenji Saito
脆弱性診断研究会 第34回セミナー資料
脆弱性診断研究会 第34回セミナー資料
脆弱性診断研究会
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Koichiro Sumi
OpenWhisk Serverless への期待
OpenWhisk Serverless への期待
Hideaki Tokida
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
Kenji Urushima
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Kenji Urushima
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
Kenji Saito
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
zaki4649
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
Kenji Saito
ブロックチェーン連続講義 第7回 スマートコントラクト
ブロックチェーン連続講義 第7回 スマートコントラクト
Kenji Saito
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Yuki Anzai
Bitcoinを技術的に理解する
Bitcoinを技術的に理解する
Kenji Urushima
AndroidLint #DroidKaigi
AndroidLint #DroidKaigi
Yukiya Nakagawa
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
Destaque
(19)
introduction to jsrsasign
introduction to jsrsasign
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
ビットコインと社会 ─ ビットコインだけでは何も変わらない
ビットコインと社会 ─ ビットコインだけでは何も変わらない
脆弱性診断研究会 第34回セミナー資料
脆弱性診断研究会 第34回セミナー資料
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
OpenWhisk Serverless への期待
OpenWhisk Serverless への期待
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
FinTech と分散システム 〜またの名を仮面ライダーフィンテック〜
ブロックチェーン連続講義 第7回 スマートコントラクト
ブロックチェーン連続講義 第7回 スマートコントラクト
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Bitcoinを技術的に理解する
Bitcoinを技術的に理解する
AndroidLint #DroidKaigi
AndroidLint #DroidKaigi
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
Semelhante a Rails4 security
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
SFDG ROOKIES
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
leverages_event
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
Yuji Takayama
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
Laravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
Silex入門
Silex入門
Takuya Sato
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
yoshinori matsumoto
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Yuji Takayama
Web担当者が知っておくべきPHPとセキュリティ
Web担当者が知っておくべきPHPとセキュリティ
Yasuo Ohgaki
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
Tatsuyoshi Mashiko
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
Realmの暗号化とAndroid System
Realmの暗号化とAndroid System
Keiji Ariyama
Rails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
kimulla
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Hideo Kashioka
Ruby開発者のためのHeroku入門
Ruby開発者のためのHeroku入門
Salesforce Developers Japan
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Yukimitsu Izawa
Semelhante a Rails4 security
(20)
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Laravel5を使って開発してみた
Laravel5を使って開発してみた
Silex入門
Silex入門
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Web担当者が知っておくべきPHPとセキュリティ
Web担当者が知っておくべきPHPとセキュリティ
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Realmの暗号化とAndroid System
Realmの暗号化とAndroid System
Rails and twitter #twtr_hack
Rails and twitter #twtr_hack
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Ruby開発者のためのHeroku入門
Ruby開発者のためのHeroku入門
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Mais de Yasuo Ohgaki
忘れられているデータセキュリティ
忘れられているデータセキュリティ
Yasuo Ohgaki
ネットワークから学ぶソフトウェアセキュリティの基礎
ネットワークから学ぶソフトウェアセキュリティの基礎
Yasuo Ohgaki
5分で解るセキュアコーディング
5分で解るセキュアコーディング
Yasuo Ohgaki
アプリ開発者に大きな影響 2017年版OWASP TOP 10
アプリ開発者に大きな影響 2017年版OWASP TOP 10
Yasuo Ohgaki
SQLインジェクション総”習”編
SQLインジェクション総”習”編
Yasuo Ohgaki
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行
Yasuo Ohgaki
ソースコード検査に耐えるコードとは?
ソースコード検査に耐えるコードとは?
Yasuo Ohgaki
経営者・マネージャーが知るべき情報セキュリティ
経営者・マネージャーが知るべき情報セキュリティ
Yasuo Ohgaki
セキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャー
Yasuo Ohgaki
PHPにないセキュリティ機能
PHPにないセキュリティ機能
Yasuo Ohgaki
PHPにないセキュリティ機能
PHPにないセキュリティ機能
Yasuo Ohgaki
PHPにないセキュリティ機能
PHPにないセキュリティ機能
Yasuo Ohgaki
PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料
Yasuo Ohgaki
データベースセキュリティ
データベースセキュリティ
Yasuo Ohgaki
Postgre SQL 9.3 新機能
Postgre SQL 9.3 新機能
Yasuo Ohgaki
Mais de Yasuo Ohgaki
(15)
忘れられているデータセキュリティ
忘れられているデータセキュリティ
ネットワークから学ぶソフトウェアセキュリティの基礎
ネットワークから学ぶソフトウェアセキュリティの基礎
5分で解るセキュアコーディング
5分で解るセキュアコーディング
アプリ開発者に大きな影響 2017年版OWASP TOP 10
アプリ開発者に大きな影響 2017年版OWASP TOP 10
SQLインジェクション総”習”編
SQLインジェクション総”習”編
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行
ソースコード検査に耐えるコードとは?
ソースコード検査に耐えるコードとは?
経営者・マネージャーが知るべき情報セキュリティ
経営者・マネージャーが知るべき情報セキュリティ
セキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャー
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料
データベースセキュリティ
データベースセキュリティ
Postgre SQL 9.3 新機能
Postgre SQL 9.3 新機能
Rails4 security
1.
Rails 4 Security エレクトロニック・サービス・イニシアチブ HTTP://WWW.E-SI.JP/
2.
自己紹介 氏名:大垣靖男(Ohgaki Yasuo)
メール:yohgaki@ohgaki.net SNS: yohgaki (Twitter/Facebook/Gmail/LinkedIn) 職業: エレクトロニック・サービス・イニシアチブ有限会社社長 PHP技術者認定機構顧問・BOSS CON CTO・岡山大学大 学院講師 Webアプリソースコード検査 (Ruby/PHP/Java/C#/ObjectiveC)など OSS開発者:PHP・Momonga-Linuxコミッター 2
3.
PROVE for PHP
3
4.
Windows7でRails4 4
5.
注意: すべてのセキュリティ対策を 解説していません! このスライドに記載されている対策のみが対策ではありません。 5
6.
Rails4 6
7.
Rails4 7 http://edgeguides.rubyonrails.org/4_0_release_notes.html
8.
Rails4 Major Features Ruby
2.0推奨、1.9.3+以上 Turbolinks Russiaon Doll Caching Strong Parameters 8 http://edgeguides.rubyonrails.org/4_0_release_notes.html
9.
ITセキュリティ 9
10.
ITセキュリティ? ITセキュリティ Confidentiality IntegrityAvailability 10 機密性 – 許可した者のみアクセス 完全性
– 情報・処理が正確・安全可用性 – 利用者が利用できる
11.
ITセキュリティ対策? リスクの識別 緩和策の選別 緩和策の導入 状態の検査 11
12.
よくあるカン違い セキュリティ対策は完璧でなければならない! 12 適切な緩和策 リスク管理 セキュリティ対策 法令、標準、 ベストプラクティス 脆弱な対策でも 適当なセキュリティ対策 となる場合も
13.
構造とセキュリティ 13
14.
アプリの基本構造 14 Rails アプリ
ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ
15.
信頼できるもの? 15 Rails アプリ ライブラリ
外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 初期状態ではアプリのみ
16.
プログラムの基本構造 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション 16 脆弱性 脆弱性 脆弱性
17.
入力バリデーション •入力パラメータは入力処理として バリデーションする ベストプラクティス •入力パラメータを入力処理ではない部分で バリデーションする バッドプラクティス 17
18.
セキュリティ対策の基本 入力・出力制御 •SANS/CWE TOP25 Monster
Mitigation #1 •ISO27000 / ISMS •多くのベストプラクティス、セキュリティ標準 入力バリデーション •SANS/CWE TOP25 Monster Mitigation #2 •エスケープ → ヘルパー → バリデーション 出力コントロール 18 順番が重要
19.
入力・出力のコントロール 19 フレームワーク 。
アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力・出力のコントロール 入力・出力のコントロール
20.
Strong Parameter 20
21.
最も重要な変更 Strong Parameter 21 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails3のバリデーションは Model Rails4のバリデーションは Controller Controller Model View
22.
Rails3 22 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails3のバリデーションは Model Controller Model View ActiveRecordを利用しない場合、 バリデーションを行えない。 欠陥 ActiveModel?! Rails3
23.
Rail3の入出力制御 23 アプリ ライブラリ 外部システム
ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ バリデーション 出力エスケープ 出力エスケープ Rails3
24.
Rails4 24 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails4のバリデーションは Controller Controller Model View ActiveRecord・ActiveModelの利用に 関わらず、バリデーションが行える ベスト プラクティス Rails4
25.
Rails4の入出力制御 25 アプリ ライブラリ 外部システム
ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力バリデーション・出力エスケープ バリデーション 出力エスケープ Rails4
26.
セキュリティ対策ポイント 26 アプリ ライブラリ 外部システム
ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力バリデーション・出力エスケープ バリデーション 出力エスケープ Rails4 バリデーション 出力エスケープ
27.
古い手法 Weak Parameter 27 @post.update_attributes(post_params) Rails3 Modelのバリデーションが動作 @post.update_attributes(:user, 'User
Name') Rails3 @post.update_column(:user, 'User Name') Modelのバリデーション無し
28.
新しい手法 Strong Parameter 28 class UsersController
< ApplicationController private def user_params params.require(:user).permit(:name, :email).validate(self) end end Controllerでバリデーションが動作 メソッドチェインでバリデーション https://github.com/rails/strong_parametersRails3 Rails4 追加するだけ
29.
古い手法の変更点 29 @post.update_attributes(post_params) Rails3 Modelのバリデーションが動作 @post.update_attributes(:user, 'User
Name') Rails3 @post.update_column(:user, 'User Name') Modelのバリデーション無し @post.update(post_params) Rails4 @post.update_column(post_params) Rails4
30.
Modelのバリデーション? • 多重のセキュリティ・フェイルセーフ • Modelでもバリデーションを行う方がより安全 •
ただしStrong Parameterと全く同じバリデーション であればあまり意味がない • ゆるいホワイトリストバリデーションが適当 • 例:数値なら文字が数字だけか?文字列なら常識的な 長さを超えないか?など Modelのバリデーションは行うべきか? 30 ベスト プラクティス
31.
Defense for Major
Threats 31
32.
Javascript インジェクション •直接出力には<%= raw var
%>, <%== var %> •h, html_escape*, json_escape, sanitize_css •無効化は<% somePost.content.html_safe %> •URLエンコード:url_encode(s) ERB:デフォルトHTMLエスケープ •FormHelper: check_box, etc •FormTagHelper: HTMLフォームタグ •UrlHelper: link_to*, button_to, mail_to •SanitizeHelper: sanitize*, strip_* •JavaScriptHelper: escape_javascript •その他、沢山 ActionView::Helpers::* 32
33.
Javascript インジェクション •多岐に渡る攻撃ソース •フォーム、URL、クッキー、JSON、データベース、ログファイル、ヘッダー、メー ル、etc •ブラウザは「複数」の出力先 •HTTPヘッダー、HTMLコンテント、URL、CSS、Javascript、JSON •DOMベースJavascriptインジェクション •クライアント側でのインジェクションが可能 •クライアントで実行されると全くログに残らない(検出不可能) Javascriptインジェクションは最も厄介な問題 •学習とトレーニング – さまざまな原因と攻撃手法と対策を知る 総合的な対策が重要 33
34.
SQLインジェクション •ORMにより保護 – find,
update, etc •プレイスホルダ ActiveRecord •sanitize*メソッドでエスケープ ActiveRecord::Sanitization 34 User.where(["name = ? and email = ?", "Joe", "joe@example.com"]) # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com'; User.where(["name = :name and email = :email", { name: "Joe", email: "joe@example.com" }]) # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com'; Rails4 sanitize_sql([“name=‘%s’ and group_id=‘%s’, ”foo‘bar“, 4]) → "name='foo''bar' and group_id='4'"
35.
CSRF 35 http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
36.
CSRF • ActionView • Controller ビルトイン 36 protect_from_forgery
secret: "123456789012345678901234567890..." <head> <%= csrf_meta_tags %> </head> # File actionpack/lib/action_view/helpers/csrf_helper.rb, line 19 def csrf_meta_tags if protect_against_forgery? [ tag('meta', :name => 'csrf-param', :content => request_forgery_protectio tag('meta', :name => 'csrf-token', :content => form_authenticity_token) ].join("¥n").html_safe end end
37.
CSRF CSRF対策のオプション 37 protect_from_forgery with: :exception
# default protect_from_forgery with: :null_session # セッションを空に protect_from_forgery with: :rest_session # 新しいセッション Rails4 Rails3のデフォルト Rails4のデフォルト(推奨)
38.
Session管理 •攻撃手法:Javascriptインジェクション、盗聴 •盗聴対策にはSSL有効化が効果的 •config.force_ssl = true SessionIDの乗っ取り •コリージョンディテクション(?) •特に問題なし Session
IDはMD5 •!ベストプラクティス •Rails4では暗号化 CWE-311 SNS/CWE TOP 25 #8 SessionのデフォルトはCookieStore 38
39.
Session Fixation • Railsのセッション管理機構もセッション固定化に脆弱 •
ログイン後のセッションID更新は必須 • reset_session セッションIDの固定化 39 http://guides.rubyonrails.org/security.html#session-fixation
40.
ファイル アップロード・ダウンロード •ファイル名に”../”を付けて他のディレクトリに保存 •ファイルアップロードに限らずファイル名を使う場合に注意 ディレクトリトラバーサル Railsセキュリティガイドの例 •“../”を削除するだけで十分か?不十分か? 問題 40 def sanitize_filename(filename) filename.strip.tap do
|name| # NOTE: File.basename doesn't work right with Windows paths on Unix # get only the filename, not the whole path name.sub! /¥A.*(¥¥|¥/)/, '' # Finally, replace all non alphanumeric, underscore # or periods with underscore name.gsub! /[^¥w¥.¥-]/, '_' end end
41.
ブラックリスティング 簡単な物でも間違えやすい • ディレクトリトラバーサル攻撃でよくある間違い ”../”を削除するだけで十分か?不十分か? • Unicode正規化やエンコーディング 問題1 •
“../”を削除するだけでは簡単に攻撃可能 問題2 41 # 入力文字列: .../...// # 処理: ../ を削除 # 出力結果: ../
42.
セキュリティトークン • ソースへの書き込みはNG(OSSでは必須) • CWE-798
SANS/CWE TOP 25 #7 Config/initializers/secret_token.rb 42 TestAPP::Application.config.secret_key_base = ‘0982380234...‘ TestAPP::Application.config.secret_key_base = ENV['SECRET_KEY_BASE']
43.
必ず参照すべき資料 43
44.
Railsセキュリティガイド 44 http://guides.rubyonrails.org/security.html
45.
OWASP TOP 10
45 https://www.owasp.org/index.php/Top_10_2013-Top_10
46.
SANS/CWE TOP 25
46 http://cwe.mitre.org/top25/
47.
Rails/Gemを信頼する? 47
48.
Rails/Gemを 信頼できるか? •信頼するために検査することも要求 •SANS/CWE TOP 25
- 不正な外部コードの混入も •Rails4 – 10000コミット以上、500以上のコントリビュータ ベストプラクティス「信頼できるフレームワーク・ライブラリ」利用 •Rails3までのバリデーション機構はベストプラクティスとはいえない •Mass Assingnment問題はPHPのregister_globals問題と同じ問題 •SANS/CWE TOP 25に記載されている脆弱性も考慮されていないことも •セッション固定化の緩和策はとられていない(単独であれば小リスク) •Ruby 2.1でscrub導入(不正文字エンコーディング対策) 著名な開発者でもセキュリティスペシャリストとは限らない •セキュリティ専門家と呼ばれる人達の間でも「正しい対策」について意見 が分かれる •例:文字エンコーディングバリデーション、セッション固定化対策 誤解や混乱 48
49.
action_view¥helpers¥tag_ helper.rb TagHelperに利用されるタグ属性処理 49 def tag_option(key,
value, escape) value = value.join(" ") if value.is_a?(Array) value = ERB::Util.h(value) if escape %(#{key}="#{value}") end デフォルト有効valueのみエスケープ keyは通常シンボルなので「普通」は大丈夫?
50.
上級レベル開発者に必須 セキュリティ対策を行うには出力先の「入力仕様」を正しく知る 「入力仕様」を知るには「エスケープ処理」を知る
「ヘルパー」の実装が正しいか、使い方が正しいか判断可能 「バリデーション」の実装が正しいか判断可能 50 •SANS/CWE TOP25 Monster Mitigation #2 •エスケープ → ヘルパー → バリデーション 出力コントロール セキュリティ 対策として順番 ヘルパー エスケープ バリデー ション 実務の順番
51.
フレームワーク・ライブラリ との付き合い方 •APIに制限があることは当たり前 •ベストプラクティスであるとは限らない 妄信しない •APIを使う前に、さっと確認する コードを確認する •危ない入力でどんな結果になるのか確認する 結果を確認する 51 正しいエスケープの方法を 知らないと判断できない 正しいエスケープ結果を 知らないと判断できない
52.
ご清聴ありがとうございました。 WEBアプリのセキュリティのお問い合わせはINFO@ES-I.JPへ 52
Baixar agora