左門至峰の株式会社エスエスコンサルティング)です。過去問を多数引用しながら、基礎知識をしっかり学んでもらうように作ってあります。(情報セキュリティスペシャリスト)を楽しく学べるように工夫したいと思います。Model)とは、JavaScriptなどのアプリケーションからWEBページ(Document)を操作する仕組みです。以下に詳しい解説があります。https://www.ipa.go.jp/files/000024729.pdf上記にあるように、HTMLファイルの中にJavaScriptを記載することで、HTMLファイルの文字を表示を変えることができます。javascriptで書いているだけじゃん、と思った人は、それで間違っていません。知らず知らずのうちに、DOMの仕組みを活用しているのです。この仕組みを使った、DOMベースのXSS(クロスサイトスクリプティング)にも注意する必要があります。DOMを理解するために、上記サイトのサンプルプログラムを実行していただくといいと思います。<html><head><title>DOM体験のサンプルページ</title></head><body>私が追記しました。ここは書き換わりません。id="p1">このページはサンプルです。'このページはサンプルでした。id="p1"の部分にアクセスして文字を書き換えます。私が追記しました、の部分は書き換わりません。DOMに関しては、以下のサイトが詳しくてわかりやすいです。クロスサイト攻撃コメント(0)セキュアプログラミングとはセキュアプログラミングとは、セキュリティの高いプログラミングをするという考え方です。具体的には、「脆弱性のある関数を使わない」、「入力値をチェックする」、「エラーメッセージをそのまま表示しない」、「CookieにSecure属性を加える」、ながあります。IPAでは、以下のWebサイトにて、「セキュア・プログラミング講座」が掲載されています。Model)ベースのXSS(クロスサイトスクリプティング)についてです。XSSの3つに分けられます。多くのサイトなので解説がされているのが、反射型のXSSです。対策の中心はエスケープ処理です。IPAのサイトが分かりやすすぎるので、改めて解説する気も起きなくなります・・・。※javaScriptなので、サーバは無関係にクライアント側で実施されるまた、サーバにJavaScript部分の記載は送られないので、サーバにログも残らない。攻撃手法ですが、具体的にはURLに#とスクリプトを付与します。H26秋SC午後II問2をみてみましょう。問題文(I)DOMベースのXSSの対策JavaScriptによるWebページ操作に問題がある場合に起きるXSSは,DOMベースのXSSと呼ばれている。JavaScriptを利用する場合は,注意が必要である。図2に示すHTML(HTTP://www.example.jp/domXSS.html)があった場合に,図3に示すURIにブラウザからアクセスすると,“1"という警告ダイアログが表示される。警告ダイアログが表示されるURI反射型(reflected型,non-persistent型)のXSSと違って,DOMベースのXSSでは攻撃者が注入するデータがWebサイトからの応答中に出力されない。ブラウザ上のHTMLデータに入力データを動的に挿入するようなJavaScriptが応答中に含まれていると,入力データにスクリプトが含まれていたときに,そのスクリプトがブラウザ上で実行されてしまう。そのため、DOMベースのXSSは,3反射型のXSSとは診断方法が異なる。"innerHTML"などの,動的にブラウザ上のHTMLデータを操作するメソッドやプロパティを使用するのではなく,"createElement"などのDOM操作用のメソッドやプロパティを使用して,ブラウザ上のHTMLデータを構築することが必要である。図2のスクリプトを簡単に言うと、「リンクのうちhash(#)以降の文字列をブラウザに表示しなさい」ということです。document.write(decodeURIComponent(location.hash));hash(ハッシュ)とは記号の「#」のことです。・location.hashによりURIにおけるハッシュ(#)以降の部分を取得する。・decodeURIComponentによりdecodeされた状態の文字にする。・document.write関数によりハッシュ(#)以降の文字列をブラウザに表示する。この仕組みを用いて、問題文にある「"1"という警告ダイアログを表示」させるにはどうしたらいいか。#のあとに警告ダイアログが表示させるスクリプト文字を挿入します。http://www.example.jp/domXSS.html#<script>alert(1)</script>この結果、#以降の<script>alert(1)</script>が文字として取得され,警告ダイアログが表示されます。Webページのコンテンツ上に透明化した標的サイトのコンテンツを配置し,利用者が気づかないうちに標的サイト上で不正操作を実行させる。ジャッキングとは、飛行機を乗っ取るハイジャックをイメージしてください。クリックを乗っ取ると考えればいいでしょう。情報セキュリティスペシャリスト試験の過去問(H26年秋SC午後II問2)で詳しく問われましたので、その内容を確認しましょう。(II)クリックシャッキングの対策クリックシャツキングの対策には,4HTTP応答ヘッダで“X-FRAME-OPTIONS”にDENYを指定することによって,自サイトをフレーム内で表示させないようにする方法がある。近年,クリックシャッキングによると思われる事件が発生しており,この応答ヘッダに対応したブラウザが増えている。IPAの資料(https://www.ipa.go.jp/files/000026479.pdf)に、詳しい解説があるので、時間があれば読んでください。この資料では、「クリックジャッキング攻撃とは、ユーザを視覚的にだまして正常に見えるウェブページ上のコンテンツをクリックさせ、別のウェブページのコンテンツをクリックさせる攻撃のこと」と述べられています。※出典:https://www.ipa.go.jp/files/000026479.pdfユーザには、後ろにある悪意のページしか見えていないのですが、実際には表側にあるサイトをクリックしているのです。このケースでは、勝手に「情報公開」にしてしまいます。Sheets)の設定で透明にします。対策ですが、自社のWebサイトが攻撃者のサイトのiframe内で勝手に表示されないようにします。具体的には、ブラウザからコンテンツを要求されると,Webサーバはブラウザに対して「このサイトをiframe内で表示させないようにしてください」いう通知を送るのです。このとき、Webサーバからの通知に使うのが「X-FRAME-OPTIONS」というHTTPヘッダです。Webサーバが通知した「X-FRAME-OPTIONS」をブラウザが確認し,拒否が設定されていればブラウザはiframe内にコンテンツを表示しません。その他コメント(0)XAMPP(ザンプ)をインストールしてPHPセキュアプログラミングを理解するにあたり、実際にプログラミングしてみることはとてもいいことだ。Webサイトを作るのに簡単なのはPHPなので、PHPで簡易なプログラムを組んでいきたい。PHPのインストールXAMPPが便利だ。PHPだけでなく、MySQLやその他プログラムが一度にインストールできる。Windowsでも動作する。検証にはもってこいだ。https://www.apachefriends.org/jp/index.html以下の「ダウンロード」タブから最新のファイルをダウンロード(青ボタン)しよう。今回は、xampp-win32-1.8.3-4-VC11-installer.exe(125Mbyte)を取得した。インストール入れるだけ。全部インストールしてもいいのであるが、要らなさそうなものはチェックをはずした。PHPとMySQLがあればいいだろう。デフォルトのフォルダは以下。ここに、PHPのプログラムファイルも入れる。C:\xamppサービスの起動ボタンを押すだけ。PHPをやるために、最低限Apacheだけは起動しておこう。ついでにMySQLもかな。Apacheのエラーが出た場合には、なにか80番のWebサービスが既に起動している可能性がある。コントロールパネルの「サービス」にて、それらしきサービスを停止しておこう。以下のサイト(自分自身)にアクセスしてみよう。Windows版へようこそ!」らしき画面がでれば無事にPHP動作環境が完了である。(5)HTMLによるWebサーバとして当然動作する。セキュアプログラミングコメント(0)PHPの簡単なスクリプトXAMPPによるインストール以下で確認してほしい。XAMPP(ザンプ)をインストールしてPHP簡単なスクリプトを書く「ログイン画面」を作っていく。HTMLファイルに「ログイン画面」と書いてもいいが、せっかくなのでPHPのプログラミングで書く。テキストファイルを開き、以下を記載する。<?phpprint('ログイン画面')?>ファイルを保存このファイルを名前を付けて保存(login.php)とする。拡張子はphpとする必要がある。これを、以下に入れるだけでよい。C:\xampp\htdocs画面を表示してみるhttp://127.0.0.1/login.php以下のように、PHPプログラムで書いた「ログイン画面」という言葉が表示される。セキュアプログラミングコメント(0)POSTとGETという2つのメソッドHTTPのメソッドには8つのメソッドがある。http://nw.seeeko.com/archives/50654465.htmlPOSTとGETの動作の違いをPHPのスクリプトで体験してみよう。分かりやすさを優先して、余分なものは全て消してある。実際のプログラムはもう少し整形することになるだろう。ここではあくまでも、仕組みをシンプルにお伝えすることを優先している。※結果表示のスクリプト<?phpprint($_REQUEST['id']);?>さん、ログインしました。POSTの場合IDとしてuser1と、パスワードを入力してLoginボタンを押す。その後の画面(result.php)は以下のようになる。GETの場合login.htmlの赤字の「POST」部分を「GET」に変更して実行する。GETの場合は、以下のように、入力した情報がURLに表示される。ログインIDやパスワードが漏えいするので、これはよくない。それで、POSTが使われる。http://127.0.0.1/result.php?id=user1&password=passなるほど。GETは使われないのですね?そうでもない。Yahoo!やGoogleの検索ではURLに値が表示される。GETで処理しているはずだ。以下は、Yahoo!にて「network」というキーワードで検索した結果である。これにより、この検索結果のURLを保存しておいたり、誰かに共有することも可能であり、それは一つの利点である。Referer機能により、リンク先にリンク元の情報が送られる。このようにGETを利用してURLに情報が埋めこまれているから、どの検索エンジンのどのキーワードでリンク先に来たかが分かる。これによって、アクセス元の詳細な分析も可能になる。Googleの場合は、さらにシンプルである。セキュアプログラミングコメント(0)Cookieによるセッション管理セッション管理には3つがあると述べたが、一番多いのはCookieである。PHPでプログラミングをする場合、以下を書くだけである。session_start();プログラムとしては、以下のようになる。VALUE="Login"></FORM>これだけでCookieが設定されるとは便利ですね。ファイルの表示」の中で、Cookieを探してみます。あれ?無いですよ?ファイルに保存されるのは、Cookieに有効期限を付けた場合のみだ。通常は、ブラウザを閉じるとCookieは削除されるので、わざわざファイルに保存する必要はない。IEの開発ツールで見てみよう。F12を押して、三角のスタートボタンを押してキャプチャをする。Cookieタブを見ると、以下にようにPHPSESSIDとして確認できる。※http:127.0.0.1になっているのは、Webサーバ上から直接アクセスしたため。パケットキャプチャを詳しく見てみよう。PC(192.168.1.103)からWebサーバ192.168.1.102にアクセスするとする。記載されているので、ブラウザに対してSet-Cookieにてセッション情報を渡す。(上の図の2)このとき、2のフレームが以下である。Webサーバからブラウザに対し、Set-CookieにてセッションIDが渡されているのが分かる。その後、ブラウザからWebサーバへの通信(上の図の3)へは、以下のようにCookieのセッションIDを伝えながら通信をする。これにより、セッションを維持しながらの通信が可能になる。Servletの場合は以下。request.getSession(true);以下にまとめられているので参照ください。Set-CookieヘッダでセッションIDをブラウザに対して発行するようになっている。SSLによる通信の暗号化が図られている」とある。ファイルの表示」の中にある。他のテンポラリーファイルも混ざっているので見づらいが、よく探せばあるので、見ていただきたい。Cookieコメント(0)refererHTTPでは、どのサイトから訪れたのかを記録するフィールドがある。これがrefererである。これにより、ホームページのアクセス元の分析などが可能になる。どんなキーワードで検索されたかも分かるという利点もある。Goolgeで「security」と入力して検索したとする。すると、検索結果は以下のようになる。https://www.google.co.jp/#q=securityその検索結果のとあるサイトをクリックすると、Refererによって、上記のURLが通知される。このことから、Googleの「security」という検索キーワードをもとに、サイトを訪れたことが分かり、便利と言える。これは、検索エンジンがPOSTではなくGETメソッドを利用しているから、このようにURLに情報を付与する。セッション管理でGETメソッドを利用している場合、問題がある。URLにセッション情報が記載されるので、リンク先にセッション情報が漏えいする。参考であるが、過去問H26年春SC午後I問1では、以下の記述がある。GETメソッドではなくPOSTメソッドを使用しておかないと、HTTPヘッダ内のフィールドが原因で、バナー広告に設定されたリンク先のWebサーバへセッションIDが漏えいすることが考えられるね。★詳しくは、キャプチャを付けたり、図にして解説するつもりだ。セキュアプログラミングコメント(0)IPAのセキュアプログラミング試験で出題されるのはここからの内容である。理解すれば、得意分野にできるであろう。プログラミングが得意な人からすると、さほどのボリュームとは感じないだろうが、逆に未経験の人からするとハードルが高い。http://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.htmlまた、以下の情報もある。https://www.ipa.go.jp/security/vuln/websecurity.html過去問(H25SC秋午後1問1)に以下のように記載がある。Web健康診断という)が,“安全なウェブサイトの作り方”の別冊としてH)Aから公表されているとの情報を得た。(平成30年春・秋)の徹底解説をした本です。(2)論文試験の意識改革に!論文試験の合格のコツがわかる本。論文試験に一発合格した10人のアンケートも掲載。至峰(技術評論社)私のIT資格取得に対するノウハウを1冊にまとめた本です。左門至峰のプロフィール左門至峰の簡単なプロフィールはこちらプライバシーポリシープライバシーポリシーへのリンクはこちら講演・研修・セミナーの依頼こちらからメッセージをお送りください。第三者には公開されません。講演・セミナー以外のメッセージにはお答えできませんので、ご理解ください。エスエスコンサルティング↑このページのトップヘ。