サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 3. 不正スクリプトの実行対策.

Slides:



Advertisements
Similar presentations
セッション管理 ソフトウェア特論 第 8 回. ここでの内容 セッション管理の基本を知る。 HttpSession の使い方を知る。
Advertisements

ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
0 クイックスタートガイド|管理者編 スマートデバイスのビジネス活用を支援する法人向けファイル共有サービス.
電子社会設計論 第12回 Electronic social design theory 中 貴俊.
サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 9. 偽リクエストによるサービスの不正利用対策.
OWL-Sを用いたWebアプリケーションの検査と生成
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
情報基礎A 情報科学研究科 徳山 豪.
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
WagbyR6.5 Update 14 PPT版 更新情報
ブラウザの基本操作 前のページに戻る ブラウザの左上にある 「戻る」ボタンで、自分がたどってきた一つ前のページに戻ることができます。
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
情報理工学部 情報システム工学科 3年 H 井奈波 和也
画像展示サイト“Fragments” 『閲覧しやすさ』と『デザイン性』を両立させた Webデザイン
下藤 弘丞 SecureWeblogの構築.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
オンライン登記申請マニュアル 【第4段階】 オンライン登記申請編
エンタープライズアプリケーション II 第10回 / 2006年7月23日
ケータイキット for Smarty のご紹介
ネット時代のセキュリティ2(脅威の例) 2SK 情報機器工学.
情報セキュリティ読本 三訂版 - IT時代の危機管理入門 -
WagbyR6.5 Update 12 PPT版 更新情報
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
稚内北星学園大学 情報メディア学部 助教授 安藤 友晴
第4回 個人の動画配信補足のためのWeb構築
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
Vulnerability of Cross-Site Scripting
インターネット社会の脅威 (インターネット社会のセキュリティ) 開始 再生時間:5分20秒.
タグライブラリとJSP J2EE I 第10回 /
セキュリティ・チェックリスト解説 【5~10分】
セッション管理 J2EE I 第9回 /
第13回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
HTTPプロトコルとJSP (1) データベース論 第3回.
Webを利用した授業支援システムの開発 北海道工業大学 電気電子工学科 H 渋谷 俊彦.
タグライブラリとJSP J2EE II 第2回 2004年10月7日 (木).
HTTPプロトコル J2EE I 第7回 /
サーバ構成と運用 ここから私林がサーバ構成と運用について話します.
情報コミュニケーション入門 総合実習(1) 基礎知識のポイント(2)
情報セキュリティ読本 四訂版 - IT時代の危機管理入門 -
マイクロソフト Access を使ってみよう 第1回
データベース設計 第9回 Webインタフェースの作成(1)
Javaによる Webアプリケーション入門 第9回
Javaによる Webアプリケーション入門 第5回
基礎プログラミング演習 第1回.
第8章 Web技術とセキュリティ   岡本 好未.
2003年度 データベース論 安藤 友晴.
情報コミュニケーション入門b 第10回 Web入門(1)
情報コミュニケーション入門b 第10回 Web入門(1)
第2回 SQL インジェクション その攻撃と対処 NECラーニング 山崎 明子.
セキュリティ 05A2013 大川内 斉.
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
スマートデバイスのビジネス活用を支援する法人向けファイル共有サービス
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
ミドルウェア”TSUNAGI”を 用いたWEBアプリケーションの構築
7-0.SWORD Client for WEKO インストールマニュアル Version 2.2
コンピュータ プレゼンテーション.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 金子拓磨
情報セキュリティ - IT時代の危機管理入門 -
社会と情報 情報社会の課題と情報モラル 情報化が社会に及ぼす影響と課題
第一回 情報セキュリティ 05A1027 後藤航太.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
第2回 Webサーバ.
中等情報科教育Ⅱ 情報セキュリティの確保.
データの改竄を防ぐ仕組み 2002/9/12 牧之内研究室「インターネット実習」Webページ
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 3. 不正スクリプトの実行対策

講義内容 1. 2 *.Webサイトの仕組みとWebプログラミング基礎 *.不正スクリプトの実行対策 6.7 *.データベースの不正操作対策 8 *.システムの不正操作対策とHTTPレスポンスの改竄対策 9 *.偽リクエストによるサービスの不正利用対策 10 *.セッションIDの 不正取得対策 11.総合演習(1) 12 *. 公開ディレクトリの不正横断対策と認証認可制御の欠落 による不正アクセス対策とエラーメッセージからの情報 漏えい対策 13.総合演習(2) 14.総合演習(3) 15.学期末試験 ※* はレポートがある回になります 。

本日の内容  Webサイトの脆弱性について  クロスサイトスクリプティングの脆弱性攻 撃体験と脆弱性の修正  アンケートページの改竄(反射型)

脆弱性とは  脆弱性は 、 コンピュータソフトウェアの欠陥 ( バ グ 、 不具合 、 あるいはシステム上の盲点 ) のひと つで 、 本来操作できないはずの操作 ( 権限のない ユーザが権限を超えた操作を実行するなど ) がで きてしまったり 、 見えるべきでない情報が第三者 に見えてしまうような不具合をいう 。 ( Wikipedia より )

脆弱性が悪用されると  機密情報が第三者に閲覧される  Web サイトの内容が書き換えられる  閲覧者に対してマルウェアを感染させる  アカウントの乗っ取りが行われる  Web サイトのサービスが利用不能になる  クレジットカード情報等の個人情報が抜き取られ る  etc...

脆弱性があると駄目な理由 1  経済的損失が大きい  利用者の金銭的損失を補わなくてはならない  Web 上のサービスを停止しなくてはならない  信用の損失により 、 売り上げが下がる  金券など迷惑料の支払いにより出費がかさむ

脆弱性があると駄目な理由 2  法的な要求を満たしていない  個人情報の保護に関する法律 ( 個人情報保護法 ) 2003 年 ( 平成 15 年 ) 5 月 23 日成立  第十五 ~ 三十六条 個人情報取扱事業者の義務等 ( 安全管理措置 ) 第二十条 個人情報取扱事業者は 、 その取り扱う個人デー タの漏えい 、 滅失又はき損の防止その他の個人データの安 全管理のために必要かつ適切な措置を講じなければならな い 。  法第二条第三項第五号 ( 個人情報取扱事業者の例外規定 ) 個人情報によって識別される特定の個人の数の合計が過去六 月以内のいずれの日においても五千を超えない者

( 技術的な ) 安全管理措置  個人情報の保護に関する法律についての経済産業分野を 対象とするガイドライン 経産省  個人データへのアクセス  認証 、 制御 、 権限管理 、 記録  個人データを扱う情報システム  不正ソフトウェア対策 、 動作確認時の対策 、 監視 、 移送・送 信時の対策  「 個人データへのアクセス制御 」 を実践するために講じる ことが望まれる手法  個人データを取り扱う情報システムに導入したアクセス制御 機能の有効性の検証 ( 例えば 、 ウェブアプリケーションのぜ い弱性有無の検証 )

脆弱性があると駄目な理由 3  利用者に対してほぼ回復が不可能なダメージを与え る  なりすましによる利用者の名誉棄損  情報漏えいに伴う不安や苦痛といった精神的ダメージ  利用者に対して嘘をつくことになる  安全性をうたっていることに対する嘘  攻撃活動の加担  マルウェア感染によって知らない間に迷惑メール送信 や DDoS 攻撃 ( 分散型サービス妨害攻撃 ) などの不正 活動を行う

なぜ脆弱性が生まれるのか ?  開発者のセキュリティに対する知識不足や無責任さから 生じる  脆弱性に対する対策方法を知らない  脆弱性の診断を行っていない  とりあえず 、 動けばよいという感じで作っている  納期に間に合わない  作り終えそうなときに仕様変更はめんどくさい  発注者のセキュリティに対する知識不足や開発業者任せ から生じる  仕様書にセキュリティの要件やテスト項目を含めていない  セキュリティのテスト結果を確認しないで納品を受領する

開発ライフサイクル  発注者  企画 、 仕様書作成 、 発注 、 納品物受領 、 運用  開発業者 ( 赤枠 )  受注 、 要件定義 、 設計 、 実装 、 テスト 、 納品

仕様書  発注者の要望を明確化しまとめた文書  物品製造 、 物品売買 、 物品改造 、 作業請負 、 ソフト ウェア製作 、 賃貸借入など  Web アプリケーション製作の仕様書には 、 セキュ リティ要件が記載されていないケースがある 。  知らないと書けない 。

定義すべきセキュリティ要件 1. 認証 ( 本人検証 )  認証・再認証を実施するタイミング 、 パスワードの条 件 、 アカウントロックの利用条件 2. 認可 ( アクセス制御 )  認証情報・状態をもとにアクセスする条件 3. セッション管理  セッション ID の扱い方 、 セッション ID を破棄するタイ ミング 4. パラメータ  パラメータの扱い方 、 入力パラメータの検証 5. 文字列処理  文字列の扱い方 OWASP 「 Web システム / Web アプリケーションセキュリティ要件書 」

定義すべきセキュリティ要件 ( つづき ) 6.HTTPS  https の利用条件 、 サーバ証明書の利用 7.Cookie  Cookie の扱い方 8. 画面設計  入力や画面遷移などセキュリティ上考慮すべき事項 、 使用禁止の機能 9. その他  エラーメッセージ 、 OS コマンド 、 セキュリティ情報 、 データファイルなどの扱い方 OWASP 「 Web システム / Web アプリケーションセキュリティ要件書 」

HTTPS(Hyper Text Transfer Protocol Secure)  セッションを暗号化する HTTP 通信  サーバ証明書で Web サイトが本物であることを確認する 。  暗号化するための鍵の交換し 、 データを暗号化する Web サーバ クライアント Web ブラウザ HTTPS リクエスト HTTPS レスポンス Web サーバ ソフトウェア データ ベース 検索 サーバ証明書 暗号 / 復号鍵

セッションとは  セッションは一連のインタラクティブな操作のこと。  典型的には、ログインしてからログアウトするまでが 一つのセッション。 Web サーバ SNS の Web サイトにアクセス ログインページを送付 ログイン ユーザ専用ページを送付 ログアウト ログアウト後のページを送付 クライアント

セッションIDとCookie  セッションIDはWebサーバが発行するセッションの識別。  セッション変数はセッションIDと関連パラメータ(ログイ ンIDや日付など)を紐づけした情報を格納する領域  Cookieはブラウザが保持するセッションID。 Web サーバ ログイン情報送信 セッション ID を発行 該当するユーザ専用ページを送付 ログイン済みのアクセス 該当するページを送付 クライアント Web サーバ ID ・パスワード認証 セッション変数格納 セッション ID 検証 Cookie に保存 されたのセッ ション ID を送信 セッション変数参照

静的 / 動的 Web ページ  静的 Web ページ  HTML に記述された内容がそのまま表示される 。  クリックなどユーザのアクションによって表示内 容が動的に変わることはない 。  つまり 、 基本的に脆弱性は生まれない 。  動的 Web ページ ( Web アプリケーション )  HTML に記述された内容とは別の内容が表示される 。  ユーザのアクションによって表示内容が動的に変 わる 。  つまり 、 JavaScript や PHP などスクリプトを使っ た Web ページでは 、 脆弱性が生まれやすい 。

Web アプリケーションセキュ リティプロジェクト  OWASP(Open Web Application Security Project)  Web セキュリティに関する問題を 解決するための国際コミュニティ  OWASP Foundation はセキュリティ 専門家によって創立された非営利組織  2001 年から活動開始 、 米国政府認定 NPO  200 以上の拠点に支部がある  国内は OWASP Japan, OWASP Kansai, OWASP Kyushu

基本的な脆弱性 OWASP Top インジェクション A1 認証とセッション管理の不備 A2 クロスサイトスクリプティング( XSS ) A3 安全でないオブジェクト直接参照 A4 セキュリティ設定のミス A5 機密データの露出 A6 機能レベルアクセス制御の欠落 A7 クロスサイトリクエストフォージェリ (CSRF) A8 既知の脆弱性を持つコンポーネントの使用 A9 未検証のリダイレクトとフォワード A10

Web アプリケーションのセ キュリティリスク  攻撃者は多様な潜在的経路で 、 Web アプリケーションを 介して 、 ビジネスや組織に害を及ぼす 。

OWASP Top 10 の順位付け  悪用難易度 、 検出難易度および影響についての世論的推 計と普及度データに基いて選択され 、 順位付けされてい る 。

A1- インジェクション ( 注入 )  攻撃者がサーバーに SQL 文などを送って想定外の動作をさ せることが可能な脆弱性  SQL インジェクション 、 OS コマンドインジェクション 、 HTML ヘッダインジェクションなど

A2- 認証とセッション管理の不 備  認証およびセッションに関する情報 ( アカウント 、 パス ワード 、 セッション ID ) の管理機能の欠点があることで 情報が漏えいする脆弱性

A3- クロスサイトスクリプティ ング ( XSS )  攻撃者が脆弱性のある他人の Web サイトに悪意のあるス クリプトを埋め込み 、 Web サイトの利用者にそのスクリ プトを実行させるサイト横断型攻撃が可能な脆弱性

A4- 安全でないオブジェクト直 接参照  Web サイトの公開時にファイル 、 フォルダ 、 データベー ス情報などが誰もでも直接参照できてしまう状態があるこ とで 、 攻撃者にアクセスを許してしまう脆弱性

A5- セキュリティ設定のミス  Web サーバや OS の設定のミスによって 、 攻撃者に関連す るシステムのデータや機能に不正アクセスを許してしま う脆弱性

A6- 機密データの露出  機密データを暗号化していない 、 暗号化用の鍵の管理が 甘い 、 弱いアルゴリズムを使用した暗号化など機密デー タの保護対策の不備により機密データが盗まれる脆弱性

A7- 機能レベルアクセス制御の 欠落  Web アプリケーションの機能に対してユーザ権限 、 管理 者権限など適切な権限が保護されていないことで 、 攻撃 者に不正なアクセスを許してしまう脆弱性

A8- クロスサイトリクエスト フォージェリ (CSRF)  攻撃者が脆弱性のある他人の Web サイトに罠のリンクを 埋め込み 、 正規のセッション ID を用いた偽造のリクエス トを送信することで 、 不正な処理を可能にする脆弱性

A9- 既知の脆弱性を持つコン ポーネントの使用  脆弱性があるバージョンのコンポーネントを使い続けて いることで 、 攻撃者にその脆弱性を利用される脆弱性

A10- 未検証のリダイレクトと フォワード  Web サーバが別のページに移動を要求するリダイレクト 機能やサーバ内部で別のページに移動させるフォワード機 能が未検証により 、 これらの機能を悪用される脆弱性

過去の脆弱性との違い  注意すべき脆弱性は基本的に変わらない 。  開発段階で脆弱性への対策を施しておくことが大変重要

本日の内容  Webサイトの脆弱性について  クロスサイトスクリプティングの脆弱性攻 撃体験と脆弱性の修正  アンケートページの改竄(反射型)

はじめに  AppGoat を起動しましょう 。  C:\AppGoat01\IPATool にある start.bat をダブル クリック

次に  「 演習を始める前に 」 のリンクをクリックしましょう 。  「 Smarty について 」 のリンクをクリックしましょう 。

smarty  HTML で記述されたテンプレートと呼ばれる雛形 ( 拡張 子は tpl ) と 、 PHP プログラムにより生成されたデータを 合成することで 、 クライアントへの出力を作成するソフ トウェア 処理のロジック部分と HTML のコンテンツ部 分を分離することで、 プログラマーとデザイ ナーの分業が可能

smarty  Index.php <?php $smarty = new Smarty(); $smarty->assign(‘title’, ‘Smarty の使 用方法 ’); $smarty->assign(‘msg’, ‘Smarty の 使用方法を記述します 。 ’); $smarty->display(‘index.tpl’); ?> Smarty とは {$title} {$msg}  Index.tpl  assign 関数でテンプレートファイルへ埋め込まれた該当する変 数への値をセットする  display 関数で変数をセットしたテンプレートを表示する

演習をはじめましょう  「 ウェブアプリケーション実習環境へ 」 のリンクをク リックしましょう 。

注意事項を一読しましょう 。  注意事項を一読したら 、「 はい 」 をクリックし 、 同意 しましょう 。 不正アクセス行為の禁止等に関する法律が定められています。 コンピュータやデータの破壊や改ざんには刑事罰が科せられます。 絶対にしないようにしましょう。

演習テーマ クロスサイトスクリプティング  「 アンケートページの改ざん ( 反射型 )」 のリンクを クリックしましょう 。

基本的なの演習の流れ 1. テーマ概説説明 2. 原理解説 3. 演習 4. 影響解説 5. 対策方法解説 6. 脆弱性修正 7. 動作確認 8. 解答例確認 脆弱性攻撃を体験 脆弱性対策を学習

スクリプトとは  スクリプト言語とは 、 プログラムの記述や実行を比 較的簡易に行うことができるプログラム言語の総称 。 スクリプトは 、 台本・脚本を意味する 。  JavaScript  クライアントの Web ブラウザ上で処理を実行す るスクリプト言語  マウスやキーボードなどユーザからのアクション をきっかけに特定の動作をする動的 Web ページ を作成できる 。

クロスサイトスクリプティング ( XSS ) とは  攻撃者が脆弱性のある他人の Web サイトに悪意のあるス クリプトを埋め込み 、 Web サイトの利用者にそのスクリ プトを実行させるサイト横断型攻撃が可能な脆弱性

クロスサイトスクリプティング の種類  反射型クロスサイト・スクリプティングの脆弱性  ウェブアプリケーションが 、 ユーザからの入力データに含 まれる不正なスクリプトを 、 そのままウェブページに埋め 込んでしまうことによって実行される 。  格納型クロスサイト・スクリプティングの脆弱性  ウェブアプリケーション内部に不正なスクリプトを保存し てしまうことによって 、 ページを閲覧するごとにスクリプ トが実行される 。  DOM ベースのクロスサイト・スクリプティングの脆 弱性  DOM(Document Object Model) を利用しているスクリプ トが 、 DOM ツリーに存在する不正なスクリプトをウェブ ページの表示に利用してしまうことによって実行される 。

反射型クロスサイト・スクリプ ティングの脆弱性の原理  ウェブアプリケーションがユーザから受け取った入力データ を 、 そのままの形 ( 実行可能な形 ) でウェブページの出力に 利用してしまう

反射型クロスサイト・スクリプ ティングの攻撃手口  HTML の文法上特別な意味を持つ特殊文字がそのまま使え ることを利用して 、 表示内容を書き換えるスクリプトを URL に組み込む 。  JavaScript の利用は 、 スクリプトタグを使う 。  ~ : javascript 利 用の宣言 特殊文字 & < > “ ‘

以下の HTML は 、 どんな結果が 表示されるか考えてみよう  Index.html window.onload=function(){ document.getElementById("msg").innerHTML = " テストページ "; } Test Page

HTML 要素の中身を変える  document.getElementById(“id 名 ”).innerHTML = “ 変更 内容 ";  “id 名 ” の付いたタグのテキストを ” 変更内容 ” に書き換える 。  HTML では 、 id 属性で様々なタグに対して ID を付与できる 。  id 付与の注意点  1 つの ID は同じ文書内で重複させてはならない  使用できる文字は 、 半角の英数字 、 ハイフン ( - )、 アン ダーバー ( _ )、 コロン ( : )、 ピリオド (. )  ハイフン以外の記号は使わない方が無難  アルファベットで始めなければならない 。  大文字と小文字は区別される

GET 送信と POST 送信  GET 送信  URL に入力値を含めてデータを送信する  送信できるデータはテキストのみ  宣言しない場合は GET で送信される ( デフォルト )  POST 送信  URL に入力値を含めずデータを送信する  送信できるデータはテキストとバイナリが可能

スクリプトを組み込む場所の一例  ?name=yamada &gender=%E7%94%B7 &age=20 &interest=%E3%81%AF%E3%81%84 &content1=%E5%B0%86%E6%9D%A5%E3%80%81%E3 %82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%8 3%86%E3%82%A3%E4%BC%9A%E7%A4%BE%E3%81% AB%E5%8B%A4%E3%82%81%E3%81%9F%E3%81%84%E 3%81%9F%E3%82%81 &experience=%E3%81%84%E3%81%84%E3%81%88 &content2= document.getElementById("msg ").innerHTML = " テストページ "; タグが表示されない(ばれない) 箇所を特定して組み込む

演習内容 ( 疑似的な攻撃 )  掲示板にアンケートページの文字を書き換えるスクリプ トを投稿し 、 アンケートページの表記を書き換える  第三者のウェブサイト  掲示板  脆弱性がある ウェブサイト  セキュリティに 関するアンケート

演習の進め方 1.Web サイトの挙動を把握する 2. 脆弱性となる箇所を特定する 3. スクリプトを含むコメントを掲示板に投稿する 4. 掲示板にスクリプトを投稿しアクセスする

演習開始  「 演習 」 のリンクをクリックしましょう 。

ページの切り替え  「 脆弱性アンケートアプリ ケーション 」 のボタンをク リックするとアンケート ページが表示されます 。  「 掲示板 」 ボタンをクリッ クすると掲示板ページが表 示されます 。  「 最初のページに戻る 」 ボ タンをクリックすると最初 のアンケートページに戻り ます 。

ソースの確認方法  演習用のページ上で右ク リックをして 「 ソースを 表示 」 または 「 フレーム のソースを表示 」 を選択 。

1. Web サイトの挙動を把握する  掲示板の入力フィールドに 様々な値を入力して動作を 確認する 。  攻撃者として 、 利用できる ことを考える 。  アンケートページに誘導す る投稿内容は ?  不正なスクリプトを含む罠 のリンクをどこに張り付け る ?  クリックにより不正なスク リプトを送信する先は ?

1. Web サイトの挙動を把握する  アンケートの入力フィー ルドに様々な値を入力し て動作を確認する 。  JavaScript の処理内容と 処理している箇所を把握 しましょう  URL も確認してみましょ う

2. 脆弱性となる箇所を特定する  のタグをそれぞ れの入力フォームに入力 して投稿してみましょう 。  投稿後に タグが 表示されない ( ばれな い ) 箇所は ?

2. 脆弱性となる箇所を特定する  Q&A  掲示板の URL の欄にアンケートページ投稿後の URL を入力 したらどうなりましたか ?  アンケートページの名前の入力フォームに の文字 列を入力したらどうなりましたか ?

3. スクリプトを含むコメント を掲示板に投稿する  アンケートページの 「 * のついている項目は入力必須 です 。」 の文字列を変更するスクリプトを作成しよう 。  document.getElementById(“id 名 ”).innerHTML = “ 変更内容 ";  Id 名をソースコードから特定しましょう 。  Id 名と変更内容を修正してください 。  掲示板に投稿する URL を作成しよう 。  uble=1&content=&name=  作成したスクリプトを追記してください 。

4. 掲示板にスクリプトを投稿 しアクセスする  作成した URL を掲示板の URL フォームに投稿し 、 動 作を確認してください 。

4. 掲示板にスクリプトを投稿 しアクセスする  「 Congratulations!! 演習 の目標を達成しまし た 。」 と表示されたら 、 OK です 。

クロスサイトスクリプティング の一般的な影響  本物のウェブサイト上に偽のウェブページが表示される  偽のウェブページが表示されることで 、 偽情報による混乱を招いた り 、 フィッシング詐欺による情報漏えいが発生したりする可能性が ある  ブラウザに保存されている Cookie を取得される  Cookie にセッション ID が格納されている場合 、 Cookie を取得され ることで 、 ユーザの成りすましが起き 、 たとえば知らないうちに ショッピングサイトで勝手に商品を購入されてしまう可能性がある 。  Cookie に個人情報などが格納されている場合は 、 その情報が漏え いする可能性がある 。  任意の Cookie をブラウザに保存させられる  任意の Cookie をブラウザに保存させられることで 、 悪意のある人 が取得したセッション ID を何らか方法で送り込まれ 、 ユーザの成り すましにつながる可能性がある 。

対処方法  原因  外部から入力できるパラメータをそのまま使用す るため 、 HTML 上に HTML の文法上特別な意味を持 つ特殊文字があれば 、 そのまま HTML の処理が実行 される  対処方法  特殊文字の意味を打ち消し 、 文字そのものとして 扱うためのエスケープ処理を行う 。

エスケープ処理  特殊文字を HTML で使用可能な文字実体 ( エンティティ ) に置き換えること  例 ) 置換前 alert(‘Hello’)  例 ) 置換後 <script>alert('Hello')</script> 特殊文字 ( 置換前 ) HTML エンティティ ( 置換後 ) && << >> “" ‘'

演習内容 ( 脆弱性の修正 )  アンケートページの反射型クロスサイト・スクリプティ ングの脆弱性となるコードを特定し 、 動的に生成される 文言にエスケープ処理を行う

修正開始  「 脆弱性の修正 」 のリンクをクリックしましょう 。

修正プログラム  掲示板  bbs.php  アンケート  enquete.php  enquete.class.php の処理内容をゲット  メッセージ割り当て  テンプレート表示  enquete.class.php  集計結果 ( XML データ ) の初期設定  コンストラクタ : オブジェクト生成時 ( enquete.class.php が呼ばれた時 ) に自動的に実行される処理  名前のエラー時の出力に関する処理

htmlspecialchars 関数  特殊文字を HTML エンティティに変換する PHP 関数  htmlspecialchars( 変換対象文字列, エスケープの種類, 文 字コード )  エスケープの種類 ( 一部 )  ENT_COMPAT : ダブルクォートは置き換える 。 シングル クォートは置き換えない  ENT_QUOTES : ダブルクォートとシングルクォートの両方 を置き換える  ENT_NOQUOTES : ダブルクォートとシングルクォートの両 方を置き換えない  文字コードの種類 ( 一部 )  Shift_JIS  UTF-8

PHP の関数  関数とは 、 ある一定の処理をまとめたもの 。  何度も繰り返し行われる一連の作業を関数としてまとめ ておき 、 必要に応じて呼び出して使う 。  組み込み関数  PHP であらかじめ用意されている関数  文字列関数 、 配列関数 、 日付・時刻関数など  ユーザ定義関数  ユーザが定義する関数 。

脆弱性の修正の手順  enquete.class.php 1. 名前のエラー時の出力処理の内容の確認 。 2.htmlspecialchars 関数を使用する箇所の特定 。 3.htmlspecialchars 関数を使用したプログラムへの修正 。

1. 名前のエラー時の出力処理 の内容の確認  enquete.class.php public function get_error_name() { $param = $this->get_get(); if (isset($param[parent::NAME])) { return $param[parent::NAME]; } else { return ""; } // リクエストパラメータを取得 // リクエストパラメータに 名前がセットされている場合 isset 関数で変数がセットさ れているか検証している // リクエストパラメータに 名前がセットされていない場合

2. htmlspecialchars 関数を 使用する箇所の特定  enquete.class.php public function get_error_name() { $param = $this->get_get(); if (isset($param[parent::NAME])) { return $param[parent::NAME]; } else { return ""; }

3. htmlspecialchars 関数を 使用したプログラムへの修正  enquete.class.php public function get_error_name() { $param = $this->get_get(); if (isset($param[parent::NAME])) { return htmlspecialchars($param[parent::NAME], ENT_QUOTES, "UTF-8"); } else { return ""; }

動作確認  スクリプトを含む URL を掲示板に投稿してみましょう 。  e.php?page=2&sex=0&old=1&company=&xss=1&tr ouble=1&content=&name= document.getEl ementById(“account”).innerHTML = “ 【 任意の文字 列 】 ”;  投稿した内容がスクリプトが実行されず 、 そのまま文字 として出力されたら OK です 。

反射型クロスサイト・スクリプ ティングの要点  反射型クロスサイト・スクリプティングの脆弱性の原因 は 、 ウェブアプリケーションがユーザから受け取った入 力値を 、 エスケープ処理せずにそのまま使って Web ページに出力することです 。  出力内容が動的に生成される場合は 、 スクリプトが実行 できないようにエスケープ処理をして表示するようにし ましょう 。