[さらに気になる]JSONの守り方:教科書に載らないWebアプリケーションセキュリティ(5)(3/3 ページ)
XSSにCSRFにSQLインジェクションにディレクトリトラバーサル……Webアプリケーションのプログラマが知っておくべき脆弱性はいっぱいあります。そこで本連載では、そのようなメジャーなもの“以外”も掘り下げていきます (編集部)
XMLHttpRequest Level 2、XDomainRequest利用の注意点は
XMLHttpRequest Level 2、XDomainRequestの両方に共通する注意点として、以下のようなものがあります。
●Cookie は送信されない
上記の例で、事前にexample.comからCookieが発行されていたとしても、XMLHttpRequest Level 2、XDomainRequestを使ってクロスドメインでリクエストを発行する場合には、Cookieは送信されません。
●Originリクエストヘッダが付加される
XMLHttpRequest Level 2、XDomainRequestによるリクエストでは、そのリクエストがどこから送出されたのかを識別するOriginヘッダが付加されます。例えば、上記のXDomainRequest の例では以下のようなリクエストヘッダとなります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記の例では、レスポンスとしてテキストデータを返却していますが、ここでも忘れてはならないのはIEのContent-Type無視によるXSSです。
このテキストデータ(この例ではhttp://example.com/data.txt)に直接IEでアクセスした場合に、データ内にHTMLの断片が含まれている場合には、IEがファイルタイプをHTMLと判断しXSSが発生する可能性があります。これを避けるために
- サーバ側では、リクエストにOriginヘッダが付加されているかを確認し、Originヘッダがある場合のみXMLHttpRequest Level 2あるいはXDomainRequestからのリクエストであると判断して正しい応答を返す。
- サーバ側では“GET”ではなく“POST”のみ受け入れる。
のような対策が必要となります。
このように、XMLHttpRequest Level 2、XDomainRequest を利用すると、JSONPのような不自然さを感じることなくクロスドメインでの通信が簡単に実現できます。これ以外にも、ブラウザによってはCross-document Messagingのような通信方法も実装されています。いずれも新しい技術であり、今後の普及に注目です。
より詳細な情報に関しては、下記のリファレンスを参考にしてください。
関連リンク: | |
---|---|
Cross-Origin Resource Sharing http://www.w3.org/TR/cors/ |
|
XMLHttpRequest Level 2 http://www.w3.org/TR/XMLHttpRequest2/ |
|
XDomainRequest Object http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx |
|
HTML5 8.2 Cross-document messaging http://dev.w3.org/html5/spec/Overview.html#crossDocumentMessages |
|
An Introduction to Cross Document Messaging in Internet Explorer 8 http://msdn.microsoft.com/en-us/library/cc511311(VS.85).aspx |
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう - Zope 3の魅力に迫る
Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? - 貧弱環境プログラミングのススメ
柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? - Haskellプログラミングの楽しみ方
のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう - ちょっと変わったLisp入門
Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう