ASP.NET 4およびASP.NET MVC 2のHTMLコーディングの新しい構文<%:%>

画像

これは、VS 2010および.NET4のリリースに特化したシリーズの 19番目の記事です。



今日の投稿では、ASP.NET 4で導入された新しい構文機能により、HTMLをコードブロックで直接自動的にエンコードできる、小さいながらも非常に便利な機能を取り上げています。



HTMLコーディング



クロスサイトスクリプティング(XSS)と弱いHTMLコーディング攻撃は、Webサイトとアプリケーションを悩ます最も一般的なセキュリティ問題の2つです。 ハッカーがCookieデータを盗むクライアントスクリプトを実装する方法を見つけたり、サイトでユーザーのIDを使用して危害を加えたりするときに発生します。



クロスサイト攻撃を排除する唯一の方法は、出力内のすべてがHTMLエンコードされるようにすることです。 これにより、入力またはユーザーに提供されたコンテンツが<script>や<img>などのタグで返されないという自信が得られます。



最近のHTMLコーディングの様子


ASP.NETアプリケーション(特にASP.NET MVCを使用するアプリケーション)は、多くの場合、コードの<%=%>ブロックの式に依存しています。 現在、開発者はほとんどの場合、ヘルパーメソッドServer.HtmlEncode()またはHttpUtility.Encode()を使用してHTMLを表示する前にエンコードします。 サンプルコードを次に示します。



image



コードは問題なく動作しますが、常に「しかし」があります。

  1. 冗長表現
  2. 開発者はServer.HtmlEncodeメソッドの呼び出しを忘れることがよくあり、エンコードが使用されていることを確認する簡単な方法はありません。


新しいコードブロック<%:%>



ASP.NET 4では、<%=%>ブロックと同様に機能するが、さらにHTMLを自動的にエンコードする新しいコード式(<%:%>)を導入します。 新しいブロックにより、上記の例で行ったように、HTMLコンテンツを明示的にコーディングする必要がなくなります。 代わりに、次のように圧縮コードを記述するだけです。



image



構文<%:%>を選択したため、コードブロックの既存のインスタンス<%=%>を置き換えるのは非常に簡単です。



再エンコードを避ける



HTMLコーディングは一般的な慣行であるため、結果が既にコーディングされており、再エンコードしたくない場合があります。



ASP.NET 4は、表示する値がHTMLとしてエンコードされているかどうかを判断することで型に実装できる新しいIHtmlStringインターフェイスを導入します(したがって、値を再エンコードしないでください)。 コードブロック<%:%>は、IHtmlStringインターフェイスの存在を確認し、値がこのインターフェイスを実装している場合、結果を再エンコードしません。 これにより、開発者は<%=%>または<%:%>の使用を選択する問題を回避できます。



<%:%>でのASP.NET MVC HTMLヘルパーメソッドの使用


ここで、HTMLコーディングの実用的なアプリケーションを示したいと思います。ASP.NETMVCでHTMLヘルパーメソッドを使用するシナリオを考えてみましょう。 これらのメソッドは、ほとんどの場合HTMLを返します。 たとえば、ヘルパーメソッドHtml.TextBox()は、次のマークアップ<input type =” text” />を返します。 ASP.NET MVC 2では、これらのヘルパーメソッドはデフォルトでHtmlStringを返し始めました。これは、返されたコンテンツがレンダリングしても安全であり、<%:%>でエンコードしないことを示します。



これにより、<%=%>と同じ方法でメソッドを使用できます。



image



したがって、ブロック<%:%>では:



image



いずれの場合でも、ヘルパーメソッドによって返されるHTMLコンテンツは、HTMLと<%:%>が再エンコードしないため、クライアントでレンダリングされます。



あなたが本物の筋金入りの労働者なら、アプリケーション内の<%=%>の場所を検索してエラーとしてマークするビルドルールを作成する機会があり、それによりHTMLエンコーディングの使用を強制します。



ASP.NET MVC 2ビューでの足場



VS 2010(または無料のWeb Developer 2010 Express)を使用してASP.NET MVC 2アプリケーションを構築すると、「ビューの追加」を使用して生成されたビューは、テキストラベル、フィールド、およびエラーメッセージ(HTMLヘルパーメソッドを使用して表示されるすべて):



image



まとめ



新しい<%:%>構文は、コンテンツおよび表示の自動HTMLエンコードのためのコンパクトなオプションを提供します。 これにより、コードの冗長性を減らし、サイトを通過するすべてのデータがHTMLエンコードされていることを確認できます。 これらはすべて、XSSおよびHTMLインジェクションからアプリケーションを保護します。



All Articles