我正在用 MVC3 书学习 JQuery。我发现Json数据确实好用,但可能不安全。
考虑一下这种情况,比如说,我有一个带有敏感客户信息的 CRM。Ajax 返回 Json 数组作为搜索结果。搜索文本框 ajax 自动完成功能还从数据库返回敏感关键字的 Json 数组。等等......他们都使用GET方法。
但是,据说 GET 方法在传递 Json 数组数据时存在漏洞:
http://haacked.com/archive/2009/06/25/json-hijacking.aspx
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
你们那里的 JQuery 专家如何解决这个问题?请帮忙。
- - 编辑: - -
@格伦。惊人的。谢谢你。根据您的提示,这就是我想出的。
- 正常的自动完成返回 json 数组
- 和一个带有包裹数组的 json 对象的 mod
这是代码,假设我们在 controller.cs 中有一个名为 txtlst 的全局列表...
// normal one
public JsonResult AutoCompleteHelper1(string term) {
//if (!Request.IsAjaxRequest()) return null;
var lst = txtlst.Where(s => s.StartsWith(term)).ToList();
var res = lst.Select(x => new { value = x }).ToList();
return Json(res, JsonRequestBehavior.AllowGet);
}
//mod one
public JsonResult AutoCompleteHelper2(string term) {
//if (!Request.IsAjaxRequest()) return null;
var lst = txtlst.Where(s => s.StartsWith(term)).ToList();
var res = lst.Select(x => new { value = x }).ToList();
return Json(new { wrapper= res, name="wrapper" }, JsonRequestBehavior.AllowGet);
}
}
然后在 .cshtml 文件中...
<p>Auto Complete Example</p>
<input type="text" name="q" id="MyInput1" data-autocomplete-source="@Url.Action("AutoCompleteHelper1", "Home")"/>
<input type="text" name="q" id="MyInput2" data-autocomplete-source="@Url.Action("AutoCompleteHelper2", "Home")" />
然后在 .js 文件中...
$(document).ready(function () {
// normal autocomplete
$("#MyInput1").autocomplete({ source: $("#MyInput1").attr("data-autocomplete-source") });
// mod autocomplete with a wrap
$("#MyInput2").autocomplete({
source: function (req, add) {
$.getJSON($("#MyInput2").attr("data-autocomplete-source"), req, function (data) {
var suggestions = [];
$.each(data.wrapper, function (i, o) {
suggestions.push(o.value);
});
add(suggestions);
});
}
});
});
--- 编辑 2: ---
请忽略那些告诉我使用 POST 的评论。他们没有阅读博客链接或不理解问题。