Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Webアプリケーションセキュリティ ディスカッション資料

2,948 views

Published on

2015/09/03 株式会社フレクトにて行われた社内勉強会資料

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Webアプリケーションセキュリティ ディスカッション資料

  1. 1. 第3回 F制度 Webアプリケーションセキュリティ ディスカッション課題 2015/09/03 第3回 株式会社フレクト テクニカルスペシャリスト 小川 充(@mitsuruog)
  2. 2. 謝辞 • 本資料は、FirefoxOSコミュニティ主宰「Webセキュリティ・ハン ズオン 〜攻撃して学ぶ、HTML5のセキュリティ〜」にて利用 された課題を、机上でできるようにしたものです。 • 主宰のFirefoxOSコミュニティ、講師の皆さん素晴らしい課題 本当にありがとうございました。 Webセキュリティ・ハンズオン 〜攻撃して学ぶ、HTML5のセキュリティ〜 https://firefox-os.doorkeeper.jp/events/21218
  3. 3. F制度とは? • 株式会社フレクトにて月1回程度行われているイベント • 企画は社員主導で行う • 社員、パートナー参加可能 • 個人のスキル・価値向上を目的としつつ、共同作業(チーム ビルディング)を行うことで、メンバー間の結束力を高めること も目的としている
  4. 4. ディスカッションの概要 • 4人ずつ班に分かれて、架空のSNSの設計に潜む脆 弱性を探します – 趣旨は、脆弱性に繋がりかねない設計上のポイントにつ いての新たな気付きを得ることです。 • 見つけた脆弱性のプレゼンタイムを設けます。 – お手元の設計資料の脆弱性がある箇所に付箋で内容を 記載してください。 – どんな攻撃ができるか、どんなまずいことが起こるか、ど う修正すればよいか説明できると良いです。
  5. 5. 設計対象(SNS) メッセージ入力(最大140文字) 自分の投稿したものは削除ボタンを表示 (管理者は全ての投稿を削除可能) 友人の投稿したメッセージを取得 投稿者情報を表示
  6. 6. SNSシステムの構成 • ドメインは「sns.flect.co.jp」。URLルーティング設定は次の通り。 – / SNS画面 – /admin 管理画面 – /api WebAPI ブラウザ localStorage (認証情報) Appサーバ SNS画面 WebAPI (SNSデータ) HTTP クライアント サーバー 管理画面
  7. 7. WebAPIの仕様 • APIサーバはSNSの各種操作を行う為のAPIを提供して いる。 • APIはCORSに準拠しており、クライアントは XMLHttpRequestLevel2を用いて非同期でデータを取 得できる。 • ログイン中のユーザの識別にはtokenという乱数値を 使用する。tokenは Cookieを通じてAPIサーバに送信さ れる。
  8. 8. ユーザ認証(1) • 有効なtokenがlocalStorageに存在しない場合、ユーザにロク ゙インを要求する。 • ログイン画面はAPIサーバにより提供される。 Topページ ログイン ページ 会員 ページ localStorageにtokenがある ログアウト(localStorageからtokenを削除して画面をリロード) localStorageに tokenがない 認証後に tokenを取得 ログイン ユーザー情報 を取得
  9. 9. ユーザ認証(2) • ユーザはログイン画面で、あらかじめ設定されたUserとPWを 入力する。 • PWを忘れた場合は、指定された質問に答えることでログイ ンできる (質問は登録時に登録してある) 秘密の質問 ログインページ 会員ページ User/PWが正しい場合 (Cookieにtokenが格納される) 秘密の答えが正しい場合 (Cookieにtokenが格納される) User/PW正しくない場合は ログインページを表示 PW忘れの場合 PW忘れた方 は こちら User PW User 好きな色は何?
  10. 10. ユーザ認証(3) • Cookieの仕様 – APIアクセス時は認証済みtokenをCookieで送信する。Cookieの詳細 は下記参照。 • 認証情報の保持仕様 – 認証情報はlocalStorage上に格納する。 Key Expires Domain Path Secure HttpOnly token 1ヶ月 sns.flect.co.jp / Key value token 認証済みtoken user ログインユーザの会員情報をシリアライズ化したもの データ形式は「ユーザ取得API」のレスポンス参照
  11. 11. 管理画面 • 会員ページから管理画面へのリンクは作成しない。 • 管理画面はUser/PW認証をかける。 401エラー 管理者ログイン ページ 管理ページ User/PWが正しい場合 User/PWが 異なる場合 User PW
  12. 12. メッセージ取得API • メッセージは開始と終了を指定して取得できる。 リクエスト GET /messages?start={始点}&end={終点}&count={件数} 始点(任意):テキスト取得開始位置(テキストIDで指定) 終点(任意):テキスト取得終了位置(テキストIDで指定)。デフォルトは最新テキストID 始点(任意):テキスト取得件数。デフォルトは20件 レスポンス { "status": "ステータスコード(1=成功, 0=失敗)", "result": { "messages": [{ "messageId": "メッセージID", "time": "投稿時のUNIX時間(例 1404162795)", "display_time": "表示用の時間(例 2015/09/03 12:34:56)", “uid”: “メッセージ投稿者のユーザID", "message": "メッセージ本文(最大140文字)" }, { ... }] } }
  13. 13. ユーザ取得API • ユーザは自身と友人のユーザ情報を取得できる。 リクエスト GET /user?uid={ユーザID} ユーザID(必須):ユーザを一意に識別するID レスポンス { "status": "ステータスコード(1=成功, 0=失敗)", "result": { “uid”: “ユーザID(システム採番したもの)", "snsId": "ログインID(例 mitsuruog)", "name": "表示名(例 小川充)", "admin": "管理者フラグ(1=管理者, 0=一般)" } }
  14. 14. メッセージ投稿API • メッセージ投稿の最大文字数は140文字。 リクエスト POST /messages?uid={ユーザID}&message={メッセージ} ユーザID(必須):ログイン中のユーザ メッセージ(必須):投稿するメッセージ(UTF−8文字列、最大140文字) レスポンス { "status": "ステータスコード(1=成功, 0=失敗)", "result": { "messageId": "割り当てられたメッセージID" } }
  15. 15. メッセージ削除API • 自分の投稿は投稿の「x」ボタンを押すことで削除できる。 • 管理者フラグ1(true)のユーザは、全ての投稿に「x」ボタンが 付き、自分を含む全ての投稿を削除できる。 リクエスト DELETE /messages?id={メッセージID}&admin={管理者フラグ} メッセージID(必須):メッセージを一意に識別するID 管理者フラグ(任意):1(管理者)0(一般)。デフォルトは0 レスポンス { "status": "ステータスコード(1=成功, 0=失敗)", "result": { "messageId": "削除されたメッセージID" } }
  16. 16. ログアウト • 画面右上の「ログアウト」ボタンを押すと、LocalStorage上に保 存されているtokenを削除する。 • ログアウトが完了すると、Top画面に遷移する。

×