次の方法で共有


方法 : HTML エンコーディングを文字列に適用して Web アプリケーションをスクリプトによる攻略から保護する

更新 : 2007 年 11 月

ほとんどのスクリプトによる攻略は、ユーザーが実行可能コード (またはスクリプト) をアプリケーションに埋め込むことができる場合に発生します。既定では ASP.NET には要求の検証機能が用意されており、ポストされたフォームに HTML が含まれている場合にエラーを発生させます。

スクリプトによる攻略を防御する方法は次のとおりです。

  • フォーム変数、クエリ文字列変数、および Cookie 値に対してパラメータ検証を実行します。この検証には、変数を予定した型に変換できるかどうか (たとえば、整数、日時などへの変換) の検証、および予定した範囲または形式の検証の 2 種類の検証を含める必要があります。たとえば、整数にする必要のあるフォーム ポスト変数を Int32.TryParse メソッドでチェックし、その変数が実際に整数であることを確認する必要があります。さらに、変換結果の整数をチェックし、その値が予定した範囲内にあることを確認する必要があります。

  • 値を応答に書き戻すときに、文字列出力に HTML エンコーディングを適用します。これにより、ユーザーが指定したすべての文字列入力を、実行可能なスクリプト コードまたは解釈済みの HTML 要素ではなく、静的なテキストとしてブラウザに表示できます。

HTML エンコーディングを適用すると、HTML の予約語を使用して HTML 要素が変換されます。これにより、HTML 要素が実行されずに表示されるようになります。

文字列に HTML エンコーディングを適用するには

  • 文字列を表示する前に、HtmlEncode メソッドを呼び出します。HTML 要素が文字列表現に変換されます。ブラウザは、HTML を解釈する代わりにこの文字列を表示します。

    HTML エンコーディングの例を次に示します。最初のインスタンスで、ユーザー入力が表示される前にエンコードされます。また別の場合には、データベースからのデータが表示される前にエンコードされます。

    a2a4yykt.alert_note(ja-jp,VS.90).gifメモ :

    この例は、@ Page 属性 ValidateRequest="false" を追加して要求の検証を無効にした場合にだけ動作します。実際のアプリケーションでは要求検証を無効にしないでください。このため、この例を表示した後で、要求検証が有効になっていることを確認してください。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
            Label1.Text = Server.HtmlEncode(TextBox1.Text)
            Label2.Text = _
                Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
    End Sub
    
    private void Button1_Click(object sender, System.EventArgs e)
    {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text = 
            Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
    }
    

参照

概念

スクリプトによる攻略の概要

Web アプリケーションのセキュリティ上の脅威の概要

Web アプリケーションのセキュリティに関する基本的な対策