アクセシビリティ
デベロッパーリソース

目次

Flash Player 10でのセキュリティに関する変更について

対策を要する変更

ポリシーファイルの厳格度:フェーズ2

Flash Playerおよびクロスドメインのポリシーファイルに関するルールがFlash Player 9,0,115,0から強化されました。既存のWebサイトへの影響を考慮し、Flash Playerの複数のリリースに分けて段階的に変更が導入されました。

Flash Player 9,0,115,0ではフェーズ1が導入されました。Flash Player 9,0,124,0ではフェーズ1.5が導入され、ソケットに関するルールのみが強化されました。Flash Player 10では最後のフェーズ2が導入され、ソケット以外(HTTP/HTTPS/FTP)のすべてのコンテンツに関するクロスドメインのポリシーファイルが変更されます。

フェーズ2の導入により、ポリシーファイルのメタポリシーのデフォルト動作が変更されます。メタポリシーとは、ドメインでのポリシーファイルの動作を指示するポリシーです。メタポリシーを使用すると、管理者はドメインのすべてのポリシーファイルを管理しやすくなります。メタポリシーの概念はFlash Player 9,0,115,0のフェーズ1で導入されました。このバージョンでは、メタポリシーのデフォルト値として「all」を使用しました。all 値では,ドメインのすべてのポリシーファイルが有効となり、以前のバージョンのFlash Playerと動作が一貫します。

Flash Player 10のフェーズ2では、メタポリシーのデフォルト値が「all」から「master-only」に変わります。これにより、すべてのマスターポリシーファイル(ドメインのルートに保存されたポリシーファイルで、 http://example.com/crossdomain.xmlのようにcrossdomain.xmlという名前が付くファイル)は引き続き予期したとおりに動作します。しかし、他の場所に定義された他のすべてのポリシーファイルは、明示的なメタポリシーがなければ動作できなくなります。

影響の範囲

この変更は、クロスドメインコンテンツにアクセスするSWFファイルに影響する可能性があります。この変更は、Flash Player 10以降で再生されるすべてのバージョンのSWFファイルに影響します。この変更は、Adobe AIRのアプリケーション以外のすべてのコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体は影響を受けません。

必要な対応

記事「Flash Player 9および10におけるポリシーファイル関連の変更点」をお読みください。

ドメインのメタポリシーを定義します(まだ定義していない場合)。マスターポリシーファイルのみを使用している場合でも、メタポリシーを明示的に定義することをお勧めします。メタポリシーは、site-controlディレクティブの中またはサーバから送られたヘッダを通じてマスターポリシーファイル内に設定できます。

ユーザの制御外のドメインに属するコンテンツを使用している場合は、そのドメインの管理者に連絡し、最新のメタポリシーがあることを確認します。

ソケット接続のタイムアウト

ActionScriptのSocketオブジェクトとXMLSocketオブジェクトでは、connect()イベントへの呼び出しから一定時間が経過すると、すべてのsecurityErrorイベントが送られます。つまり、以前は即座に送られたsecurityErrorイベントが、新しいバージョンでは送出までにより時間がかかるようになります。また、以前はネットワークの混雑や停電などの遅延があっても接続が成功しましたが、新しいバージョンでは代わりにsecurityErrorイベントが発生するようになります。タイムアウトの所定時間はデフォルトで20秒ですが、ActionScriptデベロッパーは新しいSocket.timeoutおよびXMLSocket.timeoutのAPIを使用してタイムアウトを指定することができます。

影響の範囲

この変更は、SocketクラスまたはXMLSocketクラスを使用するSWFファイルに影響する可能性があります。この変更は、Flash Player 10以降で再生されるすべてのバージョンのSWFファイルに影響します。この変更は、Adobe AIRのアプリケーション以外のすべてのコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体は影響を受けません。

必要な対応

デベロッパーは、コードでSocketオブジェクトとXMLSocketオブジェクトのSecurityErrorEvent.SECURITY_ERRORをリスンすることにより、新しいエラーに対応する必要があります。明示的なタイムアウトを設定することもできます。タイムアウトを長く設定すると、不安定なネットワーク状態では堅牢性が増しますが、エラーの発見が遅れます。タイムアウトを短く設定すると、エラーの発見は早くなりますが、不安定なネットワーク状態での堅牢性が低下します。

アップロードとダウンロードに必要なユーザ操作

Flash Player 9では、ActionScriptによってアップロードとダウンロードをいつでも行うことができました。Flash Player 10では、FileReference.browse操作とFileReference.download操作は、ユーザ操作によってトリガされたActionScriptを通じてのみ開始できます。これには、マウスのクリックやキーボード入力などの操作が含まれます。

影響の範囲

この変更は、Filereference.browseまたはFileReference.downloadを使用するSWFファイルに影響する可能性があります。この変更は、Flash Player 10以降で再生されるすべてのバージョンのSWFファイルに影響します。この変更は、Adobe AIRのアプリケーション以外のすべてのコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体は影響を受けません。

必要な対応

既存のコンテンツの中で、ユーザ操作によってトリガされるイベント外でFilereference.browseまたはFileReference.downloadを使用して参照ダイアログボックスを起動するコンテンツは更新する必要があります。新しいバージョンでは、参照ダイアログボックスをボタンやショートカットキーなどのユーザ操作を伴うイベントによって起動する必要があります。

システムクリップボードに対するデータ書き込み時のユーザ操作の義務化

Flash Player 9では、ActionScriptが任意のタイミングでデータをシステムクリップボードに代入することができました。Flash Player 10では、ユーザ操作に基づいて発生するActionScriptのみ、System.setClipboard()メソッドを正しく呼び出すことができます。ここでいうユーザ操作には、マウスボタンのクリックやキーボードを使用した入力などが含まれます。このユーザ操作要件は、ActionScript 3.0新搭載のClipboard.generalClipboard.setData()メソッドおよびClipboard.generalClipboard.setDataHandler()メソッドにも適用されます。

影響の範囲

この変更の影響は、System.setClipboard()メソッドが用いられているすべてのSWFファイルに及ぶ可能性があります。この変更はFlash Player 10以降で再生されるすべてのバージョンのSWFに影響します。この変更は、アプリケーション以外のすべてのAdobe AIRコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体には影響が及びません。

必要な対応

ユーザ操作によってトリガされるイベント以外で、System.setClipboard()メソッドを用いてシステムクリップボードにデータを代入している場合、これらの既存コンテンツはすべて更新する必要があります。クリップボードへのデータ書き込みは、今後、ボタン操作やキーボードショートカットなど、ユーザが行う操作によって発せられるイベントを介して呼び出す必要があります。

Content-Dispositionヘッダの影響による一部のSWFファイルの再生制限

一部のHTTPサーバでは、次のような応答ヘッダが送信されることがあります。

Content-Disposition: attachment

この応答ヘッダは、返されるファイルが、アクティブコンテンツとしてインライン表示されるべきではないことを、クライアントソフトウェア(ブラウザ、Flash Player、電子メールクライアントなど)に指示するためのものです。次のようなケースを考えてみてください。Webベースの電子メールサービスがあり、このサービス上でのメッセージ閲覧中に、添付ファイルを示すリンクをクリックしたとします。この時点で、サーバが「Content-Disposition: attachment」の応答で対応することができます。つまり、ブラウザに対し、当該ファイルを開く代わりにディスク上への保存を指示することができます。このヘッダはセキュリティ対策として使用されることもあります。例えば、信頼されていないユーザによってアップロードされたファイルをサーバから配信するようなケースでは、「Content-Disposition: attachment」ヘッダを利用することで当該ファイルがサーバドメイン上で実行されることを防止できます。

バージョン10.0.2からは、SWFファイルのダウンロード時にFlash Playerが「Content-Disposition: attachment」ヘッダを検出すると、当該SWFファイルは再生されず、無視されるようになります。なお、この制約はSWFファイルのみに適用されるものであることに注意してください。画像、サウンド、テキスト、XMLファイル、ポリシーファイルといった、他のタイプのコンテンツには適用されません。

影響の範囲

この変更の影響は、当該ファイルの配信時にHTTPサーバによって「Content-Disposition: attachment」が指定されるすべてのSWFファイルに及びます。この変更はFlash Player 10.0.2以降で再生されるすべてのバージョンのSWFに影響します。この変更は、アプリケーション以外のすべてのAdobe AIRコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体には影響が及びません。

必要な対応

対象のSWFファイルが配置されたHTTPサーバの設定を調整できる場合は、サーバのドメイン上で当該SWFファイルが実行されることを信頼できるかについて検討します。信頼できる場合は、HTTPサーバの設定を変更し、「Content-Disposition: attachment」ヘッダを取り除きます。

当該SWFファイルが配置されたHTTPサーバの設定を調整できないケースでは、次の2つの選択肢があります。

  • 当該サーバの管理者に連絡をとり、「Content-Disposition: attachment」ヘッダの除去が可能であるかを打診します。
  • • 当該SWFファイルを、ActionScript 3.0が用いられた他のSWFファイル経由でダウンロードするようにします。読み込み側のSWFでは、通常のLoaderクラスを使用する代わりにURLLoaderまたはURLStreamクラスを利用して、当該SWFをダウンロードするようにします。そして、読み込まれる側のSWFのダウンロードが完了したら、Loader.loadBytesを呼び出して、SWFデータを実行されるSWFファイルに変換します。なお、読み込まれる側のSWFが相対指定のURLを参照していたり、読み込み側のSWFからアクセスできないセキュリティサンドボックス権限に依存しているような場面など、このテクニックが利用できないケースがあることに注意してください。

イベントのRelated-objectプロパティの動作変更

次に示すActionScript 3.0イベントのプロパティには、DisplayObjectインスタンスへの参照が含まれています。

  • MouseEvent.relatedObject: このプロパティはmouseOvermouseOutrollOverおよびrollOutイベントの処理時に、マウスポインタの下に配置されたオブジェクトの変化に携わった、他のオブジェクト(ポインタの下に以前あったオブジェクトまたは現在あるオブジェクト)を参照します。
  • FocusEvent.relatedObject: このプロパティはmouseFocusChangekeyFocusChangefocusInおよびfocusOutイベントの処理時に、フォーカスの状況変化に携わった、他のオブジェクト(フォーカスの対象となったオブジェクトおよびフォーカスの対象から外れたオブジェクト)を参照します。
  • ContextMenuEvent.mouseTarget: このプロパティはmenuSelectまたはmenuItemSelectイベントの処理時に、コンテキストクリック(右クリックまたはControl+クリック)操作の対象オブジェクトを参照します。

Flash Player 10.0.2からは、上記プロパティのいずれかによって参照されるオブジェクトが別のセキュリティサンドボックス内にあり(対象オブジェクトが他のドメインから供給された別途SWFの一部であるケースなど)、かつ、(Security.allowDomainメソッドを用いて)2つのセキュリティサンドボックス間に相互的な信頼関係が定義されていない場合、このプロパティの値はnullに変更されます。

これらのプロパティの値には、ユーザがバックグラウンドでオブジェクトにロールオーバする場合など、あらかじめnullが設定されていることがあります。今回の変更は、null値が発生する新たな局面が現れるということに過ぎません。

ここで紹介した制約が原因でSWFファイルにnull値が発生したかどうかについては、新たに用意された次の3つのブール型プロパティをチェックすることで確認できます。

  • MouseEvent.isRelatedObjectInaccessible
  • FocusEvent.isRelatedObjectInaccessible
  • ContextMenuEvent.isMouseTargetInaccessible

影響の範囲

この変更の影響は、MouseEvent.relatedObjectFocusEvent.relatedObjectまたはContextMenuEvent.mouseTargetプロパティの参照が含まれた、すべてのSWFファイルに及ぶ可能性があります。この変更はFlash Player 10.0.2以降で再生されるすべてのバージョンのSWFに影響します。この変更は、アプリケーション以外のすべてのAdobe AIRコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体には影響が及びません。

必要な対応

SWFファイルによっては、引き続き正常に動作するものもありますが、イベントハンドラの動作を検証し、適切な反応があるかどうかを確認するようにします。問題がある場合は、イベント情報の重複が他のどのSWFファイル(ファイル群)との関連で発生しているかを特定します。可能であれば、両方のSWFファイルから、お互いのドメイン名が規定されたSecurity.allowDomainを呼び出すようにします。ただし、Security.allowDomainを呼び出す際には、あらかじめこの操作が与える影響を十分に理解するようにしてください。特に、読者のSWFファイルに対し、任意のスクリプティングを許可する特定のドメインが信頼できないような場面では、Security.allowDomainを呼び出さないように注意が必要です。

ファイルアップロードを含むPOSTでのアップロードセキュリティチェックの義務化

SWFファイルがFileReference.browseメソッドおよびFileReference.uploadメソッドを用いてサーバへのアップロードを処理する際に、Flash Playerは次の2つのセキュリティルールを適用します。

  • FileReference.browse は、必ずユーザイベントハンドラ(マウスまたはキーボードイベント)から呼び出されなければならない。
  • • アップロード先がFileReference.uploadを呼び出したSWFファイルとは異なるドメインのサーバである場合、アップロード先のサーバには必ず当該SWFファイルのドメインを信頼することが記されたポリシーファイルが必要。

バージョン10.0.2からは、サーバがアップロードを含むものと判断しかねないPOSTを実行する、ネットワークAPIが呼び出された際にも、Flash Playerは上記2つのルールを適用します。これらのアップロードの形式は、RFC1867*と呼ばれるものです。この形式はコンテンツタイプが「multipart/form-data」であり、POSTボディ部分の一部として「Content-Disposition」ヘッダ内に「filename」属性が含まれています。

影響の範囲

この変更の影響は、RFC1867形式のアップロードが含まれたPOSTリクエストを送信する、ネットワークAPIが用いられたSWFファイルに及ぶ可能性があります。この変更はFlash Player 10.0.2以降で再生されるすべてのバージョンのSWFに影響します。この変更は、アプリケーション以外のすべてのAdobe AIRコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体には影響が及びません。

必要な対応

この制約が原因でSWFコンテンツが意図通りに動作しなくなった場合は、当該SWFファイルを編集し、パブリッシュし直す必要があります。

POSTの送信先にあたるサーバの設定を調整できる場合は、SWFとサーバ両方の設定を変更し、他のファイル転送形式を使用するようにするか、単に、multipartフォーマット内で他の構文を使用するようにします。「filename」キーワードの使用を回避すれば、Flash Playerは、当該POSTリクエストをアップロードとみなしません。

RFC1867構文の使用が義務づけられている場合は、POSTの呼び出しがユーザ操作のハンドラから行われていることを確認するとともに、SWFの供給元サーバとは異なるサーバに向けてPOSTを行う場合、当該サーバに元のSWFのドメインを信頼することが記された、ポリシーファイルを設置するようにします。

一部のWMODEでのカメラおよびマイクの使用制限

Flash Player 10.0.2からは、次に示すいずれかの条件が当てはまる状況において、カメラおよびマイクの使用と設定UIの表示が許可されなくなります。

  • ウィンドウモードが「direct」または「gpu」に設定されている(ウィンドウモードはHTMLの「wmode」属性で設定します)
  • ウィンドウモードが「transparent」または「opaque」に設定されている(Linuxのみ)

影響の範囲

この変更は、ソースのwmode属性で「transparent」または「opaque」が指定され、かつ、カメラAPIまたはマイクAPIが用いられているすべてのSWFファイルに、Linux上でのみ、影響が及ぶ可能性があります。この変更はFlash Player 10.0.2以降で再生されるすべてのバージョンのSWFに影響します。この変更は、アプリケーション以外のすべてのAdobe AIRコンテンツに影響します。ただし、AIRアプリケーションコンテンツ自体には影響が及びません。

「direct」モードと「gpu」モードはFlash Player 10で追加された新機能です。したがって、パブリッシュ済みの既存SWFコンテンツに「direct」「gpu」モードの制約の影響が及ぶとは考えられません。

必要な対応

この制約の影響を受ける場合は、「wmode」の設定を「window」(デフォルト値)に変更することを検討してください。