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インジェクションからアプリケーションを保護します。

Source: https://habr.com/ru/post/J90946/


All Articles