本動画では、平成24年度秋期情報セキュリティスペシャリスト試験の過去問を題材に、WebマッシュアップとJSONPに潜むセキュリティの罠を徹底解説します。異なるドメイン間の通信を制限する同一生成元ポリシの基本から、JSONPによる個人情報漏えいの仕組み、そしてCORSやJWTといった現代の最新技術を用いた安全な実装方法まで、Web開発に必須の知識を分かりやすく学べます。 この動画で学習する重要なキーワードについて説明します。まずはじめに理解すべきなのは同一生成元ポリシです。これはブラウザのセキュリティの基本ルールであり、あるウェブページが異なるドメイン、プロトコル、あるいはポート番号を持つ別のサーバーと通信しようとする際に、ブラウザがそのアクセスを遮断する仕組みのことです。この鉄壁の門番がいるおかげで、悪意のあるサイトが勝手に別のサイトのデータを読み取ることを防いでいます。 次に知っておくべき技術がAjaxとXMLHttpRequestです。これは画面全体をリロードすることなく、非同期的にウェブサーバにアクセスしてレスポンスデータを受け取り、ウェブページの一部だけを更新できる技術です。しかし前述の同一生成元ポリシが適用されるため、通常は異なるドメインからデータを勝手に取得することはできません。 そこで過去によく使われていたのがJSONPという技術です。HTMLのスクリプトタグの仕様には、同一生成元ポリシの例外として別ドメインのデータを読み込めるという特徴があります。この仕様を突いた裏技のように利用し、異なるドメイン間でデータをやり取りする仕組みがJSONPです。しかし、この便利な抜け道は攻撃者にとっても裏口となり得ます。もし利用者が会員サイトにログインしてセッションクッキーが有効な状態で、悪意のあるサイトにアクセスしてしまうと、ブラウザが無意識にクッキーを自動送信してしまいます。その結果、悪意のあるJSONP呼出しスクリプトが実行され、意図せずに個人情報などの機密データが攻撃者のサーバーへ転送されてしまうという重大なセキュリティリスクが存在します。 このようなリスクを防ぐため、現代のウェブ開発ではJSONPは古い非推奨の技術とされており、代わりにCORSという仕組みを利用することが常識となっています。CORSは公式のHTTPヘッダを用いてアクセスを許可するドメインを明示的に指定する技術です。これにより、GETメソッドだけでなくPOSTやPUTなどすべてのメソッドに安全に対応することができます。 また、認証方式においても、自動送信されてしまうクッキーに依存する危険な実装を避け、トークンベースの認証であるJWTなどを利用することが推奨されます。予測困難なJWTなどをHTTPのヘッダに付与して通信することで、本当に認証された利用者からの正規のアクセスであるかを安全に確認することができます。かつて対策として検討されたリファラヘッダによる確認は、利用者の環境によって情報が送信されないケースもあり得るため、確実な防衛策にはなりません。過去の技術と現代のスタンダードの違いを比較しながら、これらを正しく理解することが重要です。 www.youtube.com