Rails 4 Security
エレクトロニック・サービス・イニシアチブ
HTTP://WWW.E-SI.JP/
自己紹介
 氏名:大垣靖男(Ohgaki Yasuo)
 メール:yohgaki@ohgaki.net
 SNS: yohgaki (Twitter/Facebook/Gmail/LinkedIn)
 職業:
 エレクトロニック・サー...
PROVE for PHP 3
Windows7でRails4 4
注意:
すべてのセキュリティ対策を
解説していません!
このスライドに記載されている対策のみが対策ではありません。
5
Rails4
6
Rails4 7
http://edgeguides.rubyonrails.org/4_0_release_notes.html
Rails4 Major Features
Ruby 2.0推奨、1.9.3+以上
Turbolinks
Russiaon Doll Caching
Strong Parameters
8
http://edgeguides.rubyonrai...
ITセキュリティ
9
ITセキュリティ?
ITセキュリティ
Confidentiality
IntegrityAvailability
10
機密性 – 許可した者のみアクセス
完全性 – 情報・処理が正確・安全可用性 – 利用者が利用できる
ITセキュリティ対策?
リスクの識別
緩和策の選別
緩和策の導入
状態の検査
11
よくあるカン違い
セキュリティ対策は完璧でなければならない!
12
適切な緩和策
リスク管理
セキュリティ対策
法令、標準、
ベストプラクティス
脆弱な対策でも
適当なセキュリティ対策
となる場合も
構造とセキュリティ
13
アプリの基本構造 14
Rails アプリ ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
外部システム
外部システム
外部システム
ライブラリ ...
信頼できるもの? 15
Rails アプリ
ライブラリ 外部システム ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
Webサービス
Webサービス
Webサービス
ブラウザ
ブラウ...
プログラムの基本構造
入力
•入力値のバリデーション
•入力値により適切なビジネスロジックを選択
処理
•定義された処理を実行
出力
•出力先の入力仕様に適合した出力の生成
•エスケープ、ヘルパー、バリデーション
16
脆弱性
脆弱性
脆弱性
入力バリデーション
•入力パラメータは入力処理として
バリデーションする
ベストプラクティス
•入力パラメータを入力処理ではない部分で
バリデーションする
バッドプラクティス
17
セキュリティ対策の基本
入力・出力制御
•SANS/CWE TOP25 Monster Mitigation #1
•ISO27000 / ISMS
•多くのベストプラクティス、セキュリティ標準
入力バリデーション
•SANS/CWE TOP2...
入力・出力のコントロール 19
フレームワーク 。 アプリ
ライブラリ 外部システム ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
Webサービス
Webサービス
Webサービス
...
Strong Parameter
20
最も重要な変更
Strong Parameter
21
入力
•入力値のバリデーション
•入力値により適切なビジネスロジックを選択
処理
•定義された処理を実行
出力
•出力先の入力仕様に適合した出力の生成
•エスケープ、ヘルパー、バリデーショ...
Rails3 22
入力
•入力値のバリデーション
•入力値により適切なビジネスロジックを選択
処理
•定義された処理を実行
出力
•出力先の入力仕様に適合した出力の生成
•エスケープ、ヘルパー、バリデーション
Rails3のバリデーションは
...
Rail3の入出力制御 23
アプリ
ライブラリ 外部システム ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
Webサービス
Webサービス
Webサービス
ブラウザ
ブラウザ
ブ...
Rails4 24
入力
•入力値のバリデーション
•入力値により適切なビジネスロジックを選択
処理
•定義された処理を実行
出力
•出力先の入力仕様に適合した出力の生成
•エスケープ、ヘルパー、バリデーション
Rails4のバリデーションは
...
Rails4の入出力制御 25
アプリ
ライブラリ 外部システム ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
Webサービス
Webサービス
Webサービス
ブラウザ
ブラウザ
...
セキュリティ対策ポイント 26
アプリ
ライブラリ 外部システム ライブラリ 外部システム
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
ライブラリ
Webサービス
Webサービス
Webサービス
ブラウザ
ブラウザ
...
古い手法
Weak Parameter
27
@post.update_attributes(post_params)
Rails3
Modelのバリデーションが動作
@post.update_attributes(:user, 'User N...
新しい手法
Strong Parameter
28
class UsersController < ApplicationController
private
def user_params
params.require(:user).perm...
古い手法の変更点 29
@post.update_attributes(post_params)
Rails3
Modelのバリデーションが動作
@post.update_attributes(:user, 'User Name')
Rails...
Modelのバリデーション?
• 多重のセキュリティ・フェイルセーフ
• Modelでもバリデーションを行う方がより安全
• ただしStrong Parameterと全く同じバリデーション
であればあまり意味がない
• ゆるいホワイトリストバリ...
Defense for Major Threats
31
Javascript
インジェクション
•直接出力には<%= raw var %>, <%== var %>
•h, html_escape*, json_escape, sanitize_css
•無効化は<% somePost.conten...
Javascript
インジェクション
•多岐に渡る攻撃ソース
•フォーム、URL、クッキー、JSON、データベース、ログファイル、ヘッダー、メー
ル、etc
•ブラウザは「複数」の出力先
•HTTPヘッダー、HTMLコンテント、URL、CSS...
SQLインジェクション
•ORMにより保護 – find, update, etc
•プレイスホルダ
ActiveRecord
•sanitize*メソッドでエスケープ
ActiveRecord::Sanitization
34
User.wh...
CSRF 35
http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
CSRF
• ActionView
• Controller
ビルトイン
36
protect_from_forgery secret: "123456789012345678901234567890..."
<head> <%= csrf_m...
CSRF
CSRF対策のオプション
37
protect_from_forgery with: :exception # default
protect_from_forgery with: :null_session # セッションを空に
p...
Session管理
•攻撃手法:Javascriptインジェクション、盗聴
•盗聴対策にはSSL有効化が効果的
•config.force_ssl = true
SessionIDの乗っ取り
•コリージョンディテクション(?)
•特に問題なし
...
Session Fixation
• Railsのセッション管理機構もセッション固定化に脆弱
• ログイン後のセッションID更新は必須
• reset_session
セッションIDの固定化
39
http://guides.rubyonrai...
ファイル
アップロード・ダウンロード
•ファイル名に”../”を付けて他のディレクトリに保存
•ファイルアップロードに限らずファイル名を使う場合に注意
ディレクトリトラバーサル
Railsセキュリティガイドの例
•“../”を削除するだけで十分...
ブラックリスティング
簡単な物でも間違えやすい
• ディレクトリトラバーサル攻撃でよくある間違い
”../”を削除するだけで十分か?不十分か?
• Unicode正規化やエンコーディング
問題1
• “../”を削除するだけでは簡単に攻撃可能
...
セキュリティトークン
• ソースへの書き込みはNG(OSSでは必須)
• CWE-798 SANS/CWE TOP 25 #7
Config/initializers/secret_token.rb
42
TestAPP::Applicatio...
必ず参照すべき資料
43
Railsセキュリティガイド 44
http://guides.rubyonrails.org/security.html
OWASP TOP 10 45
https://www.owasp.org/index.php/Top_10_2013-Top_10
SANS/CWE TOP 25 46
http://cwe.mitre.org/top25/
Rails/Gemを信頼する?
47
Rails/Gemを
信頼できるか?
•信頼するために検査することも要求
•SANS/CWE TOP 25 - 不正な外部コードの混入も
•Rails4 – 10000コミット以上、500以上のコントリビュータ
ベストプラクティス「信頼できるフ...
action_view¥helpers¥tag_
helper.rb
 TagHelperに利用されるタグ属性処理
49
def tag_option(key, value, escape)
value = value.join(" ") i...
上級レベル開発者に必須
 セキュリティ対策を行うには出力先の「入力仕様」を正しく知る
 「入力仕様」を知るには「エスケープ処理」を知る
 「ヘルパー」の実装が正しいか、使い方が正しいか判断可能
 「バリデーション」の実装が正しいか判断可...
フレームワーク・ライブラリ
との付き合い方
•APIに制限があることは当たり前
•ベストプラクティスであるとは限らない
妄信しない
•APIを使う前に、さっと確認する
コードを確認する
•危ない入力でどんな結果になるのか確認する
結果を確認する...
ご清聴ありがとうございました。
WEBアプリのセキュリティのお問い合わせはINFO@ES-I.JPへ
52
Upcoming SlideShare
Loading in...5
×

Rails4 security

2,219

Published on

岡山Ruby会議02(2013)の講演資料

1 Comment
9 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,219
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
21
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide

Transcript of "Rails4 security"

  1. 1. Rails 4 Security エレクトロニック・サービス・イニシアチブ HTTP://WWW.E-SI.JP/
  2. 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. 3. PROVE for PHP 3
  4. 4. Windows7でRails4 4
  5. 5. 注意: すべてのセキュリティ対策を 解説していません! このスライドに記載されている対策のみが対策ではありません。 5
  6. 6. Rails4 6
  7. 7. Rails4 7 http://edgeguides.rubyonrails.org/4_0_release_notes.html
  8. 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. 9. ITセキュリティ 9
  10. 10. ITセキュリティ? ITセキュリティ Confidentiality IntegrityAvailability 10 機密性 – 許可した者のみアクセス 完全性 – 情報・処理が正確・安全可用性 – 利用者が利用できる
  11. 11. ITセキュリティ対策? リスクの識別 緩和策の選別 緩和策の導入 状態の検査 11
  12. 12. よくあるカン違い セキュリティ対策は完璧でなければならない! 12 適切な緩和策 リスク管理 セキュリティ対策 法令、標準、 ベストプラクティス 脆弱な対策でも 適当なセキュリティ対策 となる場合も
  13. 13. 構造とセキュリティ 13
  14. 14. アプリの基本構造 14 Rails アプリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ
  15. 15. 信頼できるもの? 15 Rails アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 初期状態ではアプリのみ
  16. 16. プログラムの基本構造 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション 16 脆弱性 脆弱性 脆弱性
  17. 17. 入力バリデーション •入力パラメータは入力処理として バリデーションする ベストプラクティス •入力パラメータを入力処理ではない部分で バリデーションする バッドプラクティス 17
  18. 18. セキュリティ対策の基本 入力・出力制御 •SANS/CWE TOP25 Monster Mitigation #1 •ISO27000 / ISMS •多くのベストプラクティス、セキュリティ標準 入力バリデーション •SANS/CWE TOP25 Monster Mitigation #2 •エスケープ → ヘルパー → バリデーション 出力コントロール 18 順番が重要
  19. 19. 入力・出力のコントロール 19 フレームワーク 。 アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力・出力のコントロール 入力・出力のコントロール
  20. 20. Strong Parameter 20
  21. 21. 最も重要な変更 Strong Parameter 21 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails3のバリデーションは Model Rails4のバリデーションは Controller Controller Model View
  22. 22. Rails3 22 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails3のバリデーションは Model Controller Model View ActiveRecordを利用しない場合、 バリデーションを行えない。 欠陥 ActiveModel?! Rails3
  23. 23. Rail3の入出力制御 23 アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ バリデーション 出力エスケープ 出力エスケープ Rails3
  24. 24. Rails4 24 入力 •入力値のバリデーション •入力値により適切なビジネスロジックを選択 処理 •定義された処理を実行 出力 •出力先の入力仕様に適合した出力の生成 •エスケープ、ヘルパー、バリデーション Rails4のバリデーションは Controller Controller Model View ActiveRecord・ActiveModelの利用に 関わらず、バリデーションが行える ベスト プラクティス Rails4
  25. 25. Rails4の入出力制御 25 アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力バリデーション・出力エスケープ バリデーション 出力エスケープ Rails4
  26. 26. セキュリティ対策ポイント 26 アプリ ライブラリ 外部システム ライブラリ 外部システム ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ ライブラリ Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム ライブラリ ライブラリ ライブラリ 外部システム 外部システム 外部システム Webサービス Webサービス Webサービス ブラウザ ブラウザ ブラウザ 入力バリデーション・出力エスケープ バリデーション 出力エスケープ Rails4 バリデーション 出力エスケープ
  27. 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. 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. 古い手法の変更点 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. 30. Modelのバリデーション? • 多重のセキュリティ・フェイルセーフ • Modelでもバリデーションを行う方がより安全 • ただしStrong Parameterと全く同じバリデーション であればあまり意味がない • ゆるいホワイトリストバリデーションが適当 • 例:数値なら文字が数字だけか?文字列なら常識的な 長さを超えないか?など Modelのバリデーションは行うべきか? 30 ベスト プラクティス
  31. 31. Defense for Major Threats 31
  32. 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. 33. Javascript インジェクション •多岐に渡る攻撃ソース •フォーム、URL、クッキー、JSON、データベース、ログファイル、ヘッダー、メー ル、etc •ブラウザは「複数」の出力先 •HTTPヘッダー、HTMLコンテント、URL、CSS、Javascript、JSON •DOMベースJavascriptインジェクション •クライアント側でのインジェクションが可能 •クライアントで実行されると全くログに残らない(検出不可能) Javascriptインジェクションは最も厄介な問題 •学習とトレーニング – さまざまな原因と攻撃手法と対策を知る 総合的な対策が重要 33
  34. 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. 35. CSRF 35 http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
  36. 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. 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. 38. Session管理 •攻撃手法:Javascriptインジェクション、盗聴 •盗聴対策にはSSL有効化が効果的 •config.force_ssl = true SessionIDの乗っ取り •コリージョンディテクション(?) •特に問題なし Session IDはMD5 •!ベストプラクティス •Rails4では暗号化 CWE-311 SNS/CWE TOP 25 #8 SessionのデフォルトはCookieStore 38
  39. 39. Session Fixation • Railsのセッション管理機構もセッション固定化に脆弱 • ログイン後のセッションID更新は必須 • reset_session セッションIDの固定化 39 http://guides.rubyonrails.org/security.html#session-fixation
  40. 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. 41. ブラックリスティング 簡単な物でも間違えやすい • ディレクトリトラバーサル攻撃でよくある間違い ”../”を削除するだけで十分か?不十分か? • Unicode正規化やエンコーディング 問題1 • “../”を削除するだけでは簡単に攻撃可能 問題2 41 # 入力文字列: .../...// # 処理: ../ を削除 # 出力結果: ../
  42. 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. 必ず参照すべき資料 43
  44. 44. Railsセキュリティガイド 44 http://guides.rubyonrails.org/security.html
  45. 45. OWASP TOP 10 45 https://www.owasp.org/index.php/Top_10_2013-Top_10
  46. 46. SANS/CWE TOP 25 46 http://cwe.mitre.org/top25/
  47. 47. Rails/Gemを信頼する? 47
  48. 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. 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. 上級レベル開発者に必須  セキュリティ対策を行うには出力先の「入力仕様」を正しく知る  「入力仕様」を知るには「エスケープ処理」を知る  「ヘルパー」の実装が正しいか、使い方が正しいか判断可能  「バリデーション」の実装が正しいか判断可能 50 •SANS/CWE TOP25 Monster Mitigation #2 •エスケープ → ヘルパー → バリデーション 出力コントロール セキュリティ 対策として順番 ヘルパー エスケープ バリデー ション 実務の順番
  51. 51. フレームワーク・ライブラリ との付き合い方 •APIに制限があることは当たり前 •ベストプラクティスであるとは限らない 妄信しない •APIを使う前に、さっと確認する コードを確認する •危ない入力でどんな結果になるのか確認する 結果を確認する 51 正しいエスケープの方法を 知らないと判断できない 正しいエスケープ結果を 知らないと判断できない
  52. 52. ご清聴ありがとうございました。 WEBアプリのセキュリティのお問い合わせはINFO@ES-I.JPへ 52
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×