Silverlightを使用した安全なWebサイトの構築
Silverlightを使用するサイトには、Silverlightを使用しない通常のサイトと同じセキュリティ問題があります。
クロスサイトスクリプティング(XSS)
通常のHTMLサイトと同様に、Silverlight開発者はXSSの問題に注意する必要があります。 XSSにより、攻撃者はクライアントコンピューターでプログラムコードを実行できます。 これにより、攻撃者はクッキーやその他の機密情報にアクセスできます。 この情報を持つことは、多くの点でセキュリティに影響します。 オンラインストアの場合、攻撃者はユーザー名で製品を注文できます。 あなたは銀行で他の悪いことをすることができます。
SilverSSはSilverlightに問題があるかもしれませんが、従来のHTMLよりも可能性は低いです。 攻撃者が危険な文字列を制御されていないフィールドに送信すると、問題が発生します。 XSS脆弱性が発生する可能性のある例を次に示します。
- 攻撃者から渡された文字列でXamlReader.Load()を呼び出します。 XSSで文字列を最初にチェックせずにこのメソッドを呼び出すことはできません。
- 有害なDLLでAssembly.Load()を呼び出す
- たとえば、RESTサービスの要求を送信するために、文字列を連結してXMLを作成します 。 (System.Xmlは、System.Xml.XmlWriter System.Xml.Linq.XElementを含むXMLを作成するより効率的な方法を提供します)
- Silverlightを使用してSystem.Windows.Browserを介してHTMLを作成する
- アプリケーション内からブラウザーでSystem.Windows.Controls.WebBrowser.NavigateToString()を使用します。
- ユーザーがアップロードした.Xapファイル。
HTML / JavaScriptによるSilverlight分離
SilverlightはHTMLページの一部として実行されますが、アプリケーションがHTMLを信頼しない場合、またはその逆の場合はどうなりますか? Silverlightでは、双方向の通信をブロックできます。 .XAPとHTMLが異なるドメインからロードされると、デフォルトでブロックされます。
EnableHtmlAccessプロパティにより、 .XAPはJavaScriptメソッドを呼び出し、HTMLページを変更できます。 EnableHtmlAccessは、Silverlightの挿入時に<object>タグで示されます。 .XAPとHTMLが同じドメインからのものである場合、デフォルトでプロパティは異なる方法で有効になります-いいえ。
ExternalCallersFromCrossDomainプロパティと[ScriptableTypeAttribute] / [ScriptableMemberAttribute]属性は .XAPによって指定され、これらのメソッドをJavaScriptから呼び出すことができるかどうかを制御できます。 JavaScriptがこれらのメソッドを呼び出すには、ExternalCallersFromCrossDomainチェックを通過し、クラスが[ScriptableTypeAttribute]に装飾され、このメソッドが[ScriptableMemberAttribute]である必要があります。 JavaScriptは、アプリケーションで指定されたクラスのメソッドのみを呼び出すことができます。 ExternalCallersFromCrossDomainには、デフォルトでScriptableOnlyとNoAccessのNoAccessの2つの設定があります。
Silverlightコードを別のSilverlightコードから分離する
Silverlightコードを他のSilverlightコードから分離するには、それらを別々のドメインでホストされている別々のアプリケーションで実行する必要があります。
Silverlightアプリケーション間でデータを転送する
個別の<object>タグで実行されるSilverlightアプリケーションは、JavaScriptまたはSystem.Windows.Messaging.LocalMessageReceiver / LocalMessageSenderを使用して通信できます。 メッセージングにより、アプリケーションはメッセージを他のアプリケーションに送信して受信できます。 デフォルトでは、送信者が送信し、受信者は同じドメインにあるアプリケーションからのメッセージのみを受信します。 送信者と受信者に信頼できるドメインを追加できます。 顧客はグローバルリーチを使用できます。 送信者と受信者はどのドメインからでもアクセスできるため、注意して使用する必要があります。 メッセージが送信されたドメインを確認する方法はありませんが、受信者はどのドメインがメッセージを送信したかを知っています。
不正なファイルの再利用の防止。 XAP
.XAPがページにあることを確認するには、起動時に次のXAPコードを含める必要があります。
If (App.Current.Host.Settings.EnableHTMLAccess == false )
throw new Exception();
string htmlurl = System.Windows.Browser.HtmlPage.Document.DocumentUri.ToString();
if (htmlurl != “http: //foo.com/mypage.html”)
throw new Exception();
* This source code was highlighted with Source Code Highlighter .
サーバー検証
Silverlightアプリケーションは、サーバーリクエストの認証方法を変更しません。
受信データの検証 -非Silverlightサイトのように、サーバー上で、入力にSQL、HTML / JavaScriptコマンドが含まれていないことを確認する必要があります。SQLコマンドは、後でページに表示されます。 攻撃者は、Silverlightアプリケーションを使用せずに、アプリケーションをバイパスしてHTTP要求をサーバーに直接送信する可能性があることに注意してください。
サービスのセキュリティ保護 -Silverlightアプリケーションは、多くの場合、アプリケーションとサーバー間の接続としてサービスを使用します。 これらのインターフェイスは保護および検証する必要があります。
クロスドメインリクエストフォージェリ(CSRF)-Webサーバーは、リクエストが正しいページから送信されたことを確認する必要があります。 たとえば、Microsoftセキュリティポリシーファイルhttp://microsoft.com/clientaccesspolicy.xmlを参照してください。 サイトは、どのURLがクロスドメインリクエストを実行できるかを示します。
内部の情報セキュリティ。 XAP
.XAPファイルに機密情報(パスワード、キー、独自のアルゴリズムなど)を保存することには問題があります。 一般に、そのような情報を攻撃者から保護することはできません。 ライブラリは、.NET難読化ツールを使用してエンコードできます。 ただし、難読化により攻撃者の速度は低下しますが、干渉はできません。 検索は、 XAMLマークアップ難読化ツールがあることも示します。
セキュリティAPI
Silverlightは、ネットワークを介して送信されるデータの整合性と機密性を確保するために、さまざまなセキュリティサービスとAPIを提供します。
HTTPSは 、.XAPとそれが送信する要求の両方でサポートされています。 Silverlight 4 Betaでは、 Refererヘッダーのサポートが追加され、ユーザーがどこから来たかをサーバーに知らせることができます。 Refererヘッダーは慎重に使用する必要があり、セキュリティ検証には使用しないでください。 攻撃者はこのヘッダーに任意の値を設定できます。
System.Security.Cryptographyには、 AES秘密キー暗号化 、 SHA1とSHA256ハッシュ 、およびHMACデジタル署名用のインターフェイスが含まれています。 (Silverlightには公開キー暗号化は含まれていません)
Silverlightは、メディアファイルへのアクセスを制御するためのPlayReadyデジタル著作権管理(DRM)をサポートしています。 Silverlight 4 Betaは、 H.264保護とオフラインスクリプト保護のサポートを追加します。
おわりに
Silverlightは、セキュリティを最優先事項としてゼロから構築されました。 Silverlightは、悪意のあるWebサイトからユーザーを保護するためにWebアプリケーションを分離します。 また、Silverlightは、デフォルト設定を提供し、XSSエラーの実装を困難にすることで、Webサイトを攻撃から保護します。 Silverlightセキュリティモデルを理解すると、Silverlightを使用する安全なWebサイトを作成できます。