Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。2データバインド時のHTMLエンコードXSS未対策の場合XSSへの対策まとめデータバインド時のHTMLエンコード厳密に型指定されたデータコントロール機能で、データバインドがますます便利になりました。データバインドを行う際には、XSS(クロスサイトスクリプティング)の脆弱性にも気を付けなければいけません。注意が必要となるのが、Labelコントロールを使う場合です。XSS未対策の場合まず、XSS対策をしていないデータバインド式の書き方をリスト3に示します。コードは会議室検索画面(MeetingRooms.aspx)のGridViewコントロール内で、会議室の場所名を表示している箇所です。検索条件に該当するデータがありません。<script>alert('test');</script>そこで実行してみた結果、次の図5のように、スクリプトが実行されてしまいます。XSSの脆弱性があるということです。図5:スクリプトが実行された結果XSSへの対策XSSへの対策を行うには、HTMLエンコードを行わなければなりません。4.0までは、HttpUtilityクラスのHtmlEncodeメソッドを使い、次のリスト4のように書く必要がありました。/>ただ、この方法では記述が長くなってしまうので、少し面倒です。4.5では、自動的にHTMLエンコードを行うデータバインド式が導入されました。%>」のような":"がついた形式で書きます。/>このように記述を変更してから実行すると、今度はスクリプトが実行されずにそのままデータが表示されることが確認できます(図6)。図6:スクリプトが実行されずに表示された結果なお、リスト2のテキストボックスにバインドしている箇所では、HTMLエンコードを行うように指定していません。これはテキストボックスのTextプロパティでは、自動でHTMLエンコードが行われるという仕様があるためです。TextBox.Textプロパティ(System.Web.UI.WebControls)テキストボックスが表示されるとき、このプロパティの内容はHTMLエンコードされます。このプロパティを"&lt;b&gt;Test&lt;/b&gt;"に設定した場合、太字の"Test"ではなく"&lt;b&gt;Test&lt;/b&gt;"がブラウザに表示されます。Webフォームへの埋め込み式でもHTMLエンコードを行いたい場合があると思います。4.0で追加されたHTMLエンコード式を使いましょう。%>実行した結果が図7です。HTMLエンコード式の方を見ると、きちんとHTMLエンコードされているのが確認できます。4.5の新機能のうち、目玉の一つである「厳密に型指定されたデータコントロール」、そしてHTMLエンコードを行うデータバインド式について解説しました。今回のポイントは次のとおりです。%>」形式のデータバインド式を用いることで、自動的にHTMLエンコードが行われるTextBoxコントロールのTextプロパティは自動的にHTMLエンコードが行われる仕様になっているさて次回は、もう一つの目玉機能である「モデルバインド」について、深く掘り下げてみようと思います。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。ショウ)<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。2017対応』(日経BP社、2017)など。