2011-07-22 20 views
1

この質問はこれまでに聞かれましたが、私はこれを実際に/最良の方法で見つけられなかったことを認識しなければなりません!MVC、JQUERY、AJAX、HTMLエンコードJSONレスポンス

問題は、クロスサイトスクリプティング(XSS)攻撃を防ぐために、AJAX呼び出しから取得した応答をエンコードすることです。私は、テキストボックスと送信ボタン付きのフォームを持っています。送信すると、その値がサーバーに送信され、クライアントに戻されます。ここで私はhtmlエンコードする必要があります。 「アラート(「こんにちは)」などあります。

アイテムをどのようにエンコードしますか?メッセージは次のとおりですか?

ビュー

$(document).ready(function() { 

    $("form[action$='SubmitChatMessage']").submit(function() { 
     $.ajax({ 
      url: $(this).attr("action"), 
      type: "post", 
      dataType: "json", 
      data: $(this).serialize(), 
      success: function (response) { 
       $("#chatMessages").empty(); 

       var chatMessages = ""; 
       $.each(response, function (i, item) { 
        chatMessages += '<div>' + item.Message + '</div>'; 
       }); 

       $("#chatMessages").html(chatMessages); 
       $("#message").val(''); // Clear the textbox value 
      } 
     }); 
     return false; 
    }); 
}); 

<div id="chatContent"> 
    <% using(Html.BeginForm("SubmitChatMessage", "ProductDetails")) 
     {%> 
    <%: Html.TextBox("message")%> 
    <%: Html.Hidden("productId", Model)%> 
    <input type="submit" value="Tilføj" /> 
    <% }%> 
    <div id="chatMessages"> 
    </div> 
</div> 

コントローラーアクション

[HttpPost] 
[ValidateInput(false)] 
public JsonResult SubmitChatMessage(string message, Guid productID) 
{ 

    // 1. Store message in db 

    // 2. Fetch messages from db 
    List<Message> chats = DB.GetMessages(productID); 
    var json = (from c in chats 
       select new {Message = c.Message, CreatedDate = c.Created}); 

    return Json(json); 
} 

希望答えを得るために、これは私が非常識な運転しています! 同様の質問にはhereが与えられましたが、私の場合は.textの使い方がわかりません。

UPDATE: Is this really the solution?

答えて

4

はこのようにしてみてください。

success: function (response) { 
    var messages = $('#chatMessages'); 
    messages.empty(); 

    $.each(response, function (i, item) { 
     messages.append(
      $('<div/>', { 
       text: item.Message 
      }) 
     ); 
    }); 

    $('#message').val(''); // Clear the textbox value 
} 
+0

ここで、item.Messageの意味を説明できますか? – Nima

+0

@ニマでは、新しく作成されたdivの内容を設定するために['.text()'](http://api.jquery.com/text/)メソッドを使い、値を適切にHTMLエンコーディングする'.html()'メソッドとは逆です)。 –

+0

ありがとうございます。それはうまくいった。私は同じことが "これは本当に解決策ですか?"リンク私は更新セクションに投稿しました。しかし、ありがとう、これは私が答えで私を助けている初めてではありません:) – Nima

1

またあなたは、コントローラのアクションにHttpUtility.HtmlEncodeのようなものを使用することができます。

var json = (from c in chats 
      select new { 
       Message = HttpUtility.HtmlEncode(c.Message), 
       CreatedDate = c.Created 
      }); 

return Json(json); 
関連する問題