[HOWTO] CSSI の脆弱性に関する MTS/ASP コードの点検

文書翻訳 文書翻訳
文書番号: 253121 - 対象製品
この記事は、以前は次の ID で公開されていました: JP253121
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

概要

この資料では、クロスサイト スクリプティングのセキュリティ問題 (CSSI) の影響を受けるおそれがある、Microsoft Transaction Server および Active Server Pages (ASP) のアプリケーションを発見および修正する方法について説明します。入力が正しく検証され、正しい書式設定が行われていれば、アプリケーションを攻撃から守ることができます。

詳細

CSSI の問題は、アプリケーションによるデータ検証と書式設定の処理方法に起因するため、プレゼンテーション層から検査していくのが最適です。

この層は通常、ASP ページで構成されます。また場合によっては、ASP ページの HTML 表示を支援するコンポーネントがいくつか含まれることもあります。

後者の場合、アプリケーションを CSSI から守るために、ASP のみのアプリケーションと同じ操作を実行する必要がありますが、その物理的な実装が原因で、検証や書式設定を行うコードの一部は、ASP ページや、コンポーネントの内部で実行される点に注意することが重要です。CSSI と ASP の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
253119 HOWTO: Review ASP Code for CSSI Vulnerability
CSSI の影響を受けるおそれがある ASP アプリケーションを発見および修正するには、次の手順が有効です。
  1. 表示される HTML を生成する、ASP やコンポーネントのコードを探します。一般的には、次の 2 つのケースがあります。
    • コンポーネントが HTML 文字列を作成して返し、それを ASP がResponse オブジェクトに直接書き込む。
    • コンポーネントが Response.Write を内部で呼び出して、ページに直接書き込む。通常、Response オブジェクトの参照は、GetObjectContext.Item("Response") を呼び出すことにより、ObjectContext から取得されます。
  2. HTML 出力にアプリケーションのデータが含まれるかどうかを判断します。このデータは、データベース、ファイル、Cookie、ほかのオブジェクト変数など、さまざまなデータ ソースから取得されたものです。
  3. 適切な解決方法を決定します。何らかの入力を使って HTML を生成する ASP やコンポーネントのコードを見つけた場合は、その特定のアプリケーションに応じた適切な解決方法を決定する必要があります。解決方法としては、無効なデータの検証と選別や、データのエンコードなどがあります (これら以外にも解決方法はあります)。

書式設定の指針

書式設定を注意して行わなければならない個所を特定する際に、次の指針が参考になります。

情報をページに書き込む際、特定のアプリケーション データには HTMLEncode を実行する必要があります。HTML ページにそのまま出力することが意図されたタグについては、HTMLEncode を実行しないことが重要です。このため、コンポーネントの関数が HTML を返す場合、HTMLEncode はその内部で実行する必要があります。

コンポーネントからの文字列に対して HTMLEncode を実行するには、ASP サーバー オブジェクトへの参照が必要になります。この参照は、MTS の ObjectContext.Items コレクションから取得することができます。
sGoodHTML = GetObjectContext.Item("Server").HTMLEncode(sRawData)

: 次のコードは、レコードセットから取得した値を使って、表の行を生成します。このコードでは、出力がエンコードされません。
Do While Not oRecordset.EOF
     sHTML = sHTML & "<TR>" 
     sHTML = sHTML & "<TD>" & oRecordset("FirstName") & "</TD>"
     sHTML = sHTML & "<TD>" & oRecordset("Address") & "</TD>"
     sHTML = sHTML & "</TR>" 
Loop
このコードを修正する場合は、次のように、全体の HTML 文字列ではなく、個々の値に HTMLEncode を実行する点に注意してください。
Dim oServer As ASPTypeLibrary.Server

Set oServer = GetObjectContext.Item("Server")

Do While Not oRecordset.EOF
     sHTML = sHTML & "<TR>" 
     sHTML = sHTML & "<TD>" & oServer.HTMLEncode( oRecordset("FirstName")) & "</TD>"
     sHTML = sHTML & "<TD>" & oServer.HTMLEncode( oRecordset("Address")) & "</TD>"
     sHTML = sHTML & "</TR>" 
Loop

Set oServer = Nothing
中間に oServer オブジェクト参照を使用している点に注意してください。これは、アーリーバインディングを利用して、毎回 ObjectContext.Item の参照を解決しなくても済むようにするためのものです。オブジェクトを ASPTypeLibrary.Server として宣言するには、[Microsoft Active Server Pages Object Library] への参照設定を含める必要があります。

次の指針を考慮するようにしてください。
  • ビジネス コンポーネントでは、HTMLEncode を呼び出さないでください (それらが HTML を生成している場合を除きます)。これは、プレゼンテーション層の仕事です。
  • 一般に、HTMLEncode や何らかの ASP オブジェクトを使用するコンポーネントは、物理的に Internet Information Server (IIS) と同じコンピュータ上で実行する必要があります。
  • 解決方法としては、入力パラメータの検証や、入力パラメータの書式設定などがあります (ただし、これらに限りません)。

関連情報

関連情報については、Carnegie Mellon University の Computer Emergency Response Team (CERT) による、次の勧告を参照してください。
http://www.cert.org/advisories/CA-2000-02.html
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
252985 HOWTO: Prevent Cross-Site Scripting Security Issues For Web Applications
253119 HOWTO: Review ASP Code for CSSI Vulnerability
253120 HOWTO: Review Visual InterDev Generated Code for CSSI Vulnerability
253117 HOWTO: Prevent Internet Explorer and Outlook Express CSSI Vulnerability
253117 [IE51] クロスサイト スクリプト問題の予防策

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 253121 (最終更新日 2000-06-21) をもとに作成したものです。

プロパティ

文書番号: 253121 - 最終更新日: 2014年2月6日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Transaction Services 2.0
キーワード:?
kbnosurvey kbarchive kbcssi kbhowto KB253121
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com