ASPを保護する.NETビューステータス

4094 ワード

ViewState属性は、同じページの複数のリクエスト間でステータス値を保持するために辞書オブジェクトを提供する.これは、Webページが返信プロセス間でページとコントロールのプロパティ値を維持するためのデフォルトの方法です.
ページが処理されると、ページとコントロールの現在の状態が符号化され、結果文字列がページの非表示フィールドとして保存されます.ViewStateプロパティに格納されたデータの数がMaxPageStateFieldLengthプロパティで指定された上限を超えている場合、文字列はページの複数の非表示フィールドに保存されます.ページがサーバに返信されると、ページは初期化中にビューステータス文字列を処理し、プロパティ情報を復元します.
本明細書のベストプラクティスで説明した情報は、ビュー状態に格納されたアプリケーションデータの保護に役立つであろう.
次のコードおよびベスト・プラクティスは、アプリケーションのセキュリティを向上させることができるが、Webサーバ・コンピュータにおけるMicrosoft WindowsおよびInternet情報サービス(IIS)の最新のセキュリティ更新を頻繁に維持することも同様に重要であり、Microsoft SQL Serverまたは他のメンバーシップ・データ・ソースの任意のセキュリティ更新を含む.
より多くのセキュリティコードの作成とアプリケーションの保護に関するベストプラクティスの詳細は、Michael HowardとDavid LeBlancが共同で作成した「セキュリティコードの作成」という本で見つけることができます.または、Microsoft Patternsと実践で提供されているガイドラインを参照することもできます.

ページ内のステータスビューデータの保護


デフォルトでは、ビューステータスデータはページの非表示フィールドに格納され、64ビットベースの符号化に変換されます.また、キーワードとしてマシン検証コード(MAC)を用いたハッシュ値も作成される.ハッシュ値は符号化されたビューステータスデータに追加され、結果文字列はページに格納されます.ページがサーバに返信するとき、ASP.NETページフレームワークは、ビュー状態データのハッシュ値を再生成し、以前にページに格納されていたハッシュ値と比較します.2つのハッシュ値が一致しない場合、例外が発生し、ビューステータスデータが無効になったことを示します.
ハッシュ値を作成することにより、ASP.NETページフレームワークは、ビューステータスデータが改ざんされたかどうかをテストすることができる.しかし、ビューステータスデータは依然として表示され、悪意のあるユーザによって潜在的にキャプチャされ、読み取ることができる.
MACコード
ASP.NETページフレームがビュー状態データのハッシュ値を作成する際にMachineで使用する.configファイルで自動的に生成または指定されたMACキーワード.キーワードが自動的に生成される場合、それはコンピュータのMACアドレスに基づいて作成される.MACアドレスは、コンピュータネットワークアダプタにおける唯一のGUID値である.
MAC符号化の適用は、悪意のあるユーザがビュー状態値に基づくMACキーワードに対して行う逆工程にとって困難である.したがって、MAC符号化は、通常、ビュー状態データを改ざんした人がいるか否かを検出する際に信頼できる方法である.
通常、より大きなMACキーワードを使用してハッシュ値を生成する場合、少なくとも異なる文字列によって生成されるハッシュ値は同じである可能性があります.キーワードが自動生成されるとき、ASP.NETはSHA 1符号化を使用してより大きなキーワードを作成します.ただし、Webファーム環境では、キーワードはすべてのサーバで一致している必要があります.キーワードが異なる場合、ページが作成するサーバ以外の別のサーバに返信されると、ASP.NETページフレームに異常が発生します.そのため、Web農場環境ではMachineにいるはずです.configファイルにASPの代わりにキーワードを指定する.NETで自動生成されるキーワード.キーワードが長ければ長いほど、必要なセキュリティが高くなります.しかし、長いキーワードはハッシュ値を作成するためによく使用されるため、セキュリティ要件はパフォーマンス要件よりも常に重要です.
暗号化
MAC符号化は、ビュー状態データが改ざんされないことを防止するのに役立つが、ユーザによるデータの表示を防止することはできない.ビューステータスデータは、ページのいくつかの非表示フィールドに格納され、64ビットベースの符号化が適用される.これらのデータをSSLで転送したり、ビューのステータスデータを暗号化したりすることを防止するには、2つの方法があります.SSLを介して送信する必要があるページは、ページを受信しようとしない人がパケットを嗅ぎ、不正なデータにアクセスすることを防止するのに役立つ.
ただし、SSLはページを復号してブラウザに表示するので、ビューステータスデータは表示されます.ページの表示が許可されていない人や、ビューステータスデータにアクセスできる不正なユーザーに対してデータを保護する必要がある場合、これはメリットがあります.ただし、場合によっては、ビューステータスを使用して、ユーザーのアクセスを禁止する情報を格納するコントロールもあります.たとえば、ページには、サブアイテム識別子(データキー)をビューステータスに格納するデータバインドコントロールが含まれる場合があります.これらの識別子に消費者IDのトランザクションセキュリティ番号などの機密データが含まれている場合は、ビューステータスデータを別途暗号化するか、SSLを使用して送信する必要があります.
データを暗号化するには、まずページのViewStateEncryptionMode属性値をtrueに設定する必要があります.ビューステータスに情報を格納すれば、通常の読み書き操作を行うことができます.ページは、すべての暗号化と復号化のタスクを自動的に完了します.暗号化ビューのステータスは、アプリケーションのパフォーマンスに影響を与えるため、必要な使用を前提としてのみ使用を考慮します.
コントロールステータスの暗号化
Webコントロールは少量のデータを維持することができ、これらのデータはコントロールの状態と呼ばれ、コントロールの状態はコントロールの正常な動作に必要である.コントロールがコントロールステータスを使用している場合、アプリケーションまたはページのビューステータスが閉じられている場合でも、そのコントロールステータスを含むビューステータスフィールドは、リクエストが発生するたびにクライアントに送信されます.
コントロールステータスを使用するコントロールは、RegisterRequiresViewStateEncryptionメソッドを呼び出すことによってビューステータスを暗号化することができる.ページ内のコントロールのいずれかがビューステータスを暗号化する必要がある場合、ページ内のすべてのビューステータスも暗号化されます.
ユーザー・ビュー・ステータスごとの暗号化
Webサイトがユーザーを識別できる場合は、Page_InitイベントプロセッサでViewStateUserKeyプロパティを設定して、ページのビューステータスを特定のユーザーに関連付けることができます.これは、「クリック攻撃」を防止するのに役立ちます(注:悪意のあるユーザーは、以前に作成されたページからのビューステータスを含む有効で事前に埋め込まれたWebページを作成します.その後、攻撃者は被害者のIDを使用してサーバーにページを送信できるリンクをクリックするように被害者に誘導します).ViewStateUserKey属性の値が設定されると、攻撃者のアイデンティティが元のページのビュー状態のハッシュ値を作成するために使用されます.被害者が再びこのページを誘導して再送信すると,ユーザキーワードの違いによりハッシュ値も異なる.ページに検証エラーが表示され、例外が放出されます.
ユーザー名や識別子など、ユーザーごとに一意のViewStateUserKey属性値を設定する必要があります.

共有管理環境での構成の保護


共有管理環境でMachineを直接変更します.configファイル、または構成APIを変更したり、他の管理ツールや構成ツールを使用したりすることで、悪意のあるユーザーは、コンピュータ内の他のアプリケーションのステータス管理に影響を与える可能性のあるプロパティセットを潜在的に変更することができます.アプリケーション構成の変更を防止するには、プロファイルの構成セグメントを暗号化できます.詳細については、「保護された構成を使用して構成情報を暗号化する」を参照してください.