方法 : HTML エンコーディングを文字列に適用して Web アプリケーションをスクリプトによる攻略から保護する
更新 : 2007 年 11 月
ほとんどのスクリプトによる攻略は、ユーザーが実行可能コード (またはスクリプト) をアプリケーションに埋め込むことができる場合に発生します。既定では ASP.NET には要求の検証機能が用意されており、ポストされたフォームに HTML が含まれている場合にエラーを発生させます。
スクリプトによる攻略を防御する方法は次のとおりです。
フォーム変数、クエリ文字列変数、および Cookie 値に対してパラメータ検証を実行します。この検証には、変数を予定した型に変換できるかどうか (たとえば、整数、日時などへの変換) の検証、および予定した範囲または形式の検証の 2 種類の検証を含める必要があります。たとえば、整数にする必要のあるフォーム ポスト変数を Int32.TryParse メソッドでチェックし、その変数が実際に整数であることを確認する必要があります。さらに、変換結果の整数をチェックし、その値が予定した範囲内にあることを確認する必要があります。
値を応答に書き戻すときに、文字列出力に HTML エンコーディングを適用します。これにより、ユーザーが指定したすべての文字列入力を、実行可能なスクリプト コードまたは解釈済みの HTML 要素ではなく、静的なテキストとしてブラウザに表示できます。
HTML エンコーディングを適用すると、HTML の予約語を使用して HTML 要素が変換されます。これにより、HTML 要素が実行されずに表示されるようになります。
文字列に HTML エンコーディングを適用するには
文字列を表示する前に、HtmlEncode メソッドを呼び出します。HTML 要素が文字列表現に変換されます。ブラウザは、HTML を解釈する代わりにこの文字列を表示します。
HTML エンコーディングの例を次に示します。最初のインスタンスで、ユーザー入力が表示される前にエンコードされます。また別の場合には、データベースからのデータが表示される前にエンコードされます。
メモ : この例は、@ 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); }