asp.net
  • data-binding
  • xss
  • 2013-03-26 10 views 13 likes 
    13

    これが愚かな質問であれば私を許してください。私は明示的に答えを見つけることができませんでした。XSSから保護するために、Bind()またはEval()は自動的にHtmlEncodeを実行しますか?

    は、私はほとんど私のASPXページにバインド()やeval()を使用しない、代わりに次の構文を使用します。

    <asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %> 
    

    が、私はこのAを始めた(これは、RepeaterコントロールにItemTemplateにしていると仮定します)長い時間前に、それは疑問に思ったことはありませんでしたが、今ではこれが過度のことかもしれません。そして今、私はすべての場所で、この構文を使用するCMSを使用しています:

    <asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %> 
    

    私はバインド()または評価を(使用している場合ので、私は、基本的には、思ったんだけど)ランタイムは自動的に出力をHtmlEncodeのでしょうか?私はいつも不必要なコーディングをしていますか?

    答えて

    18

    Bind()とEval()は、そのようなことを防ぐために何もしないでエンコードしません。 <%# %>スタイルコードブ​​ロックも実行しません。

    ただし、ASP.NET 4以降を使用している場合は、<%: %>ブロックを使用してレスポンス書き込みタイプの状況でこれを処理し、データバインド状況では<%#: %>を使用できます。

    Scott Guthrieはこれについて素晴らしいpostを持っています。

    +0

    これはgoobdに似ていますが、DataBindingコンテキストに表示されているように '<%# %>'ブロックではなく、 '<%= %>'(Response.Write相当)のように見えます。真のデータバインドされたコントロールに相当する省略形はありますか? – David

    +1

    気にしないでください。ここでそれを4.5で見つけました:http://www.asp.net/vnext/overview/aspnet/whats-new#_Toc318097391私は正しい方向に向いてくれてありがとう! – David

    +0

    David申し訳ありませんが、私も答えを更新しました –

    関連する問題