HTML アプリケーションが直面する主な脅威の 1 つは(デスクトップアプリケーションと Web アプリケーションのいずれの場合も)、結果としてクロスサイトスクリプティング(XSS)などの悪意のあるコードが実行されるインジェクション攻撃です。 通常、コードは、URL 処理(
javascript:
やその他の危険なスキーム)、
eval()
、および
innerHTML
や
outerHTML
などの DOM エレメントへの外部 HTML コンテンツの割り当てなど、いくつかの共通する手段によって挿入されます。HTTP を通じて読み込み操作が行われた場合、信頼できるサービス(Google Maps など)に悪意のあるコードが挿入される可能性もあります。
開発者がアプリケーションは安全なコンテンツを利用していると想定しているときに、実際には悪意のあるコードがコンテンツに含まれていると、このような脆弱性が発生します。例えば、オンラインのブログからコメントを抽出して表示する HTML ベースの AIR アプリケーションで、ユーザーが次のようなコメントを書き込むことが許可されているとします。
<a href="#" onclick="var f=new air.File('c:\\something.txt'); f.deleteFile();">I'm cool!</a>
ユーザーがこのリンクをクリックすると、ファイルが削除される可能性があります。 損害はさらに大きくなる可能性があり、セキュリティの脆弱性はブラウザーベースの HTML アプリケーションや Ajax アプリケーションに共通しています。
JSON(JavaScript Object Notation)を通じて読み込まれた悪意のあるコードによる損害を、既存のドメインサンドボックスの制限によって緩和できるという考え方は正しくありません。
frame
や
iframe
などの小さい DOM サンドボックス境界内でさえ、すべてのデータが生成元に関係なくサンドボックス内で実行されます。最も小さいフレーム定義の DOM サンドボックス境界も、コンテンツが異なる生成元ドメインに配置されている場合にのみ、正常に機能します。 さらに、一般的な設計および実装のパターンによって、このような危険な手法が助長されています。
従来の Ajax アプリケーションの場合、ブラウザー内で実行されるアプリケーションはサンドボックス化されるので、この手法はある程度認められてきました。ユーザーのコンピューターから分離され、同じ生成元ポリシーによって制限されるので、ブラウザーアプリケーションには固有の対称性があります。
機能が豊富な API にアクセスできるリッチインターネットアプリケーションには、特有の問題が伴います。 単純なアプリケーションでも、コーディングが不適切である場合、インジェクション攻撃に対する脆弱性が含まれ、ユーザーのコンピューターに多大な損害を与える可能性があります。RIA プラットフォームの場合、悪意のある攻撃による潜在的な損害は、ランタイムが提供する価値に直接比例します。 RIA プラットフォーム内の API がより強力になり、機能が豊富になるほど、リスクも大きくなります。