Flash Player 10.1 と AIR 2 のセキュリティ仕様変更

かなり遅くなってしまいましたが、Flash Player 10.1 からセキュリティ上の理由で変更された仕様関連の情報です。変更は全部で 4 つあります。

まず、以下の 3 つは、既存のコードに影響が出る可能性のある変更です。

リダイレクトされた URL の切り捨て

1 つ目は、SWF ファイルやイメージを読み込んだ後に、読み込んだファイルの URL がドメイン名までしか見えなくなる、というものです。

この影響を受ける属性は、AS 3 では LoaderInfo.url と Sound.url それから AS 1 / AS 2 では MovieClip._url です。これらの属性値が、例えば、http://sample.jp/xxx/yyy/my.swf のはずなのに http://sample.jp/ になっている、という場合が起こりえます。

この状況が起きるのは、以下の 3 つの条件すべてが揃った場合です。

  1. ファイルの読み込み中に HTTP リダイレクトが発生
  2. ファイルを要求した SWF のドメインと、読み込まれたファイルのドメインが異なる
  3. ファイルを要求した SWF が、読み込まれたファイルへのアクセス許可を持たない

リダイレクトが発生した場合、リダイレクト後のURL 情報を見せない、というのが新しいセキュリティポリシーのようです。

URL 情報が一部隠されているかどうか、を知らせるため、AS 3 には新しい属性が追加されています。LoaderInfo.isURLInaccessible と Sound.isURLInaccessible の 2 つです 。AS 1 / AS 2 には、状況を示す属性の追加はありません。

リダイレクトされて (条件 1 を満たす) 他のドメインからファイルを読み込んだんだけど (条件 2 を満たす) URL が知りたい!というときは、ファイルへのアクセス権を与えます ( 条件 3 を満たさなくなる)。 設定方法は、読み込むファイルのフォーマットによって異なります。

読み込んだファイルが SWF の場合は、読み込まれた SWF が Security.allowDomain (AS 3) または System.security.allowDomain (AS 1 / AS 2) を実行します。これにより、ファイルを要求した SWF にアクセス権を与えます。

読み込むファイルがイメージやサウンドの場合は、サーバー上のポリシーファイルを使ってアクセス許可を設定します。その際、読み込む側の SWF が AS 3 の場合には、LoaderContext.checkPolicyFile や SoundLoaderContext.checkPolicyFile の値を true にして、確実にポリシーファイルが読み込まれているようにするのが良いでしょう。

なお、この変更は AIR 2 のアプリケーションコンテンツには影響しません。Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 の非アプリケーションコンテンツが影響を受けます。

クリップボード消去のトリガー

2 つ目は、クリップボードのデータ消去用 API は、ユーザー操作 (マウスクリックやキーの押下など) の結果として呼び出す必要がある、というものです。この変更の影響を受けるのは AS 3 の Clipboard.generalClipboard.clear() と Clipboard.generalClipboard.clearData() メソッドです。

既に、クリップボードへの書き込みは、ユーザー操作の結果として呼び出されるイベントハンドラー内に記述するよう変更が行われています (参考までに、書き込みが変更された時の記事はこちらです)。今回は、データ消去も書き込み操作の一種として扱うべき、という判断がされたようです。

この変更は AIR 2 のアプリケーションコンテンツには影響しません。Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 の非アプリケーションコンテンツが影響を受けます。

for-in / for-each イタレーション順の変更

3 つ目は、AS 3 で for-in や for-each を使ってオブジェクトの属性を扱うとき、ループ内に登場する順番が以前のバージョンとは異なる事がある、というものです。(AS 3 の言語リファレンスには、「for-in や for-each のイタレーションの順番は定義されていない」 と明記されているので、この変更により影響を受けること自体がたぶん問題ではあるのですが...)

この影響を受けるのは、オブジェクトの属性として数値 (もしくは true, false, null, undefined) と文字列 (もしくは数値以外のオブジェクト) を併用している場合です。

下に簡単なサンプルを示します。

var obj : Object = new Object();
obj[0]     = "a"; // 数値
obj["one"] = "b"; // 文字列
obj.two    = "c"; // 文字列
 

このオブジェクトは数値と文字列を属性に持つため、イタレーションの順番が以前の Flash Player 上とは変わります。具体的には、数値が先に扱われ、文字列 (その他複雑な型) が後に回るという動きをします。

と書いたからといって、新しい動作に依存するようなコードは書かないようにお願いします。またいつ変わるかわかりませんし。

この変更は Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 上で実行される全てのアプリケーションコンテンツに影響します。

ところで、なぜこれがセキュリティ関連の変更なのか、分かる人いるでしょうか?

。。。

既存のコードに影響が出る可能性のある変更は以上 3 つです。最後の 1 つは、新しい機能です。既存のコンテンツに影響を与える事はありません。詳細は次の記事までお待ちください。

 

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/88

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261