这个问题之前已经被问到过,但我必须意识到,我没有找到真正的/最好的方式来做到这一点!MVC,JQUERY,AJAX,HTML编码JSON响应
问题是,我想编码从AJAX调用中获得的响应,以防止跨站点脚本攻击(XSS)攻击。我有一个带有文本框和提交按钮的表单。提交时,该值将发布到服务器并返回给客户端。在这里,我需要对html响应进行编码,如可能是“alert('Hello')”等。
如何编码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。
UPDATE: Is this really the solution?
你能解释一下什么文字:item.Message是指在这里吗? – Nima
@Nima,它使用['.text()'](http://api.jquery.com/text/)方法来设置新创建的div的内容,并负责正确的HTML编码值与'.html()'方法相反)。 –
非常感谢。这工作。我可以看到,“这真的是解决方案吗?”中提到了这一点。我已发布在更新部分的链接。但是,谢谢,这不是你第一次帮我解答:) – Nima