MVC,JQUERY,AJAX,HTML编码JSON响应

时间:2011-07-22 17:11:52

标签: jquery asp.net-mvc ajax json html-encode

此问题之前已被问过,但我必须意识到,我没有找到真正/最好的方法来做到这一点!

问题是,我想对从AJAX调用中获得的响应进行编码,以防止跨站点脚本(XSS)攻击。我有一个带有文本框和提交按钮的表单。提交时,该值将发布到服务器并返回给客户端。在这里,我需要html编码响应,作为消息,例如可能是“警觉('你好')”等等。

如何编码以下 item.Message

查看

$(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。

更新 Is this really the solution?

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

或者,您可以在控制器的操作中使用类似HttpUtility.HtmlEncode的内容。

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

return Json(json);