CSSI の脆弱性の ASP コードを確認する方法

文書翻訳 文書翻訳
文書番号: 253119 - 対象製品
すべて展開する | すべて折りたたむ

概要

ここでは識別する方法とにクロスサイト スクリプト セキュリティの問題 (CSSI) に対して脆弱な正しい Active Server Pages (ASP) アプリケーションについて説明します。 入力が正しく検証され、正しい書式設定が行われていれば、アプリケーションを攻撃から守ることができます。

詳細

次の手順では、特定し、CSSI を受けやすいいる ASP アプリケーションを修正できます。
  1. 表示する HTML を生成する ASP コードを探します。 ASP は 2 つの方法で出力に HTML を書き込む:
    Response.Write
    					
    - と -
    <% =
    					
  2. HTML 出力が入力パラメーターを含むかどうかを決定します。 これらのパラメーターは、さまざまなソースから取得できます。 次に、共通の入力ソースを示します。

    元に戻す全体を表示する
    入力ソースASP コードのアクセス方法のサンプル
    Request.Form コレクション
    Response.Write Request.Form("username")
    									
    Request.QueryString コレクション
    <%=Request.QueryString("username")%>
    									
    Response.Write Request.QueryString("username")
    									
    <a href="http://mysite/showuser.asp?username=<% = 
    Request.QueryString("username") %>">mypage</a>
    									
    <a href="http://mysite/mypage.asp"><%=Request.QueryString("url")%></a>
    									
    オブジェクトを要求します。
    Response.Write("username")
    									
    データベースまたはデータ アクセス方法
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Cookie のコレクション
    Response.Write Request.Cookie("username")
    									
    セッションおよびアプリケーション変数
    Response.Write Session("username")
    									
  3. 何らかの入力を使用して HTML を生成する ASP コードが見つかったら、する、特定のアプリケーションに対するソリューションを評価する必要があります。 以下のソリューションはいくつかの一般的な概念 CSSI の防止を開始するのに存在します。

    必要がある注意してくださいことフィルタリングまたはエンコード、文字が確実に該当する特殊文字、フィルターをチェックはされるようにするには、Web ページのセットを指定します。 Web ページを挿入するデータと見なされる特別な特定の文字セット (文字セット) に基づくバイト シーケンスを除外する必要があります。 人気のある文字セットは ISO 8859-1 では、HTML と HTTP の初期のバージョンで既定値です。 これらのパラメーターを変更すると、アカウントのローカリゼーションの問題をせる必要があります。
    • 表示を生成するとき、入力パラメーターをエンコードするのにには、 HTMLEncode メソッドを使用します。

      一般に、CSSI のほとんどの攻撃を防ぐだけ HTMLEncode [して入力パラメーターことができます。 それらの文字を表す HTML に HTML 変数で特殊な意味を持つ文字に置き換え HTMLEncode 機能を使用して (たとえば、= &、「=」)。 データのみをエンコードする必要があることを確認と、完全な文字列ではないにしてください。
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER は、要求を送信できるドメインを制限する使用できます。

      HTTP_REFERER は、リダイレクトが発生元の要求の URL を含む文字列を返します。 Web サーバーは filled-in フォームを受信するは、右の場所から付属していない場合、元に戻す参照元フィールドを確認できます。 HTTP_REFERER を次のようにチェックインできます:
         <%
         If (Request.ServerVariables("HTTP_REFERER") = "") Or _
            (Left(Request.ServerVariables("HTTP_REFERER"),42) <> _
            "http://www.myserver.com/AppDir/mainfrm.asp") Then
            Response.Redirect "http://www.myserver.com/AppDir/mainfrm.asp"
         End If
         %> 
      							
      : [参照元フィールドがいくつかの制限。
      • 危険正当なフォーム送信をブロックします。
      • リンクは、電子メールまたは URL がないブックマークから取得可能性があります。
      • ブラウザー、参照元フィールドを HTTPS 要求中になどオフ意図的に可能性があります。
    • URLEncode をが入力パラメーターとして受け取られた URL をエンコードしてください。

      URLEncode メソッドは、エンコーディング規則を指定された文字列をエスケープ文字を含む URL を適用されます。 表示する前に受信 URL をエンコードする必要があります。 URLEncode のサンプルに示します:
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • 除去または特殊文字の入力パラメーターを変更します。 特殊文字には、次が含まれます:
      < > " ' % ; ) ( & +
      							
      を除去するかまたは表示した場合に、ブラウザーに、アプリケーションに応じてそれらを読むときに文字を変更します。

      このサンプルでは、JavaScript 特殊文字をフィルター処理を使用して:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      このサンプルではスクリプト エディションの Visual Basic 5. 0 の正規表現を使用して特殊文字をフィルター処理を:
      Function ValidateTags(QueryString)
      	Dim o
      	Set o = CreateObject("VBScript.RegExp") ' -> VB Script 5.0
      
      	Dim sBad
      
      	sBad = "(<\s*(script|object|applet|embed|form)\s*>)"   ' <  script xxx >
      	sbad = sbad & "|" & "(<.*>)"
                   ' >xxxxx<  warning includes hyperlinks and stuff between > and <
      	sbad = sbad & "|" & "(&.{1,5};)"   ' &xxxx;
      	sbad = sbad & "|" & "eval\s*\("    ' eval  ( 
       	sbad = sbad & "|" & "(event\s*=)"  ' event  =
      	
      	'Now lets check for encoding
      	sbad = Replace(sbad,"<", "(<|%60|<)")
      	sbad = Replace(sbad,">", "(>|%62|>)")
      	
      	o.IgnoreCase = True 'ignore case of string
      	o.Global =False 'stop on first hit
      
      	o.Pattern = sBad
      
      	ValidateTags = o.Test(QueryString)
      
      	Set o = Nothing
      End Function
      						

関連情報

詳細については、次のアドバイザリから、コンピューター緊急対応チーム (CERT) Carnegie Mellon 大学参照してください。
http://www.cert.org/advisories/CA-2000-02.html
詳細についてはをクリック資料以下の記事の「サポート技術情報」(Microsoft Knowledge Base) を表示します。
252985Web アプリケーションのクロスサイト スクリプティングのセキュリティの問題を防止する方法
253121CSSI の脆弱性の MTS と ASP コードを確認する方法
253120確認する方法 Visual InterDev で生成されたコード CSSI の脆弱性
253117Internet Explorer や Outlook Express CSSI の脆弱性を防止する方法
Microsoft はテクニカル サポートを見つけることに連絡先の情報をサード パーティを提供します。 この連絡先の情報は通知なしに変更可能性があります。 マイクロソフトは、このサードパーティの連絡先情報の正確さを保証しません。

プロパティ

文書番号: 253119 - 最終更新日: 2005年7月8日 - リビジョン: 1.3
この資料は以下の製品について記述したものです。
  • Microsoft Active Server Pages 4.0
キーワード:?
kbhowto kbcssi kbsecvulnerability kbcodesnippet kbsecurity kbmt KB253119 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:253119
Microsoft Knowledge Base の免責: 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