我想通过JSON从SQL Server传递大量数据,因此我可以从客户端对它进行Ajax调用。我刚开始使用Ajax,所以我做了一些基本的例子 - 根据这些例子,我可以轻松查看例如在Fiddler中发送的整个JSON。我将如何加密传递的数据,以便视图可以使用它,但它没有向公众披露?它是否可行,如果是的话 - 怎么做?
以下是我用于练习的一些代码。如果我可以根据这个基本的例子得到一些想法,或者被重定向到一个好的阅读 - 两个选项都会非常有用。
控制器
public JsonResult OutputToJson() {
var students = _db.Students.ToList();
return Json(students, JsonRequestBehavior.AllowGet);
}
查看
<div id="AjaxDiv"></div>
<script type="text/javascript">
$(document).ready(function () {
$('#btnGetStudents').click(function () {
$.getJSON("/Student/OutputToJson", null, function (data) {
var div = $('#AjaxDiv');
$.each(data, function (i, item) {
div.append("row:" + i + "name: " + item.Name + ", grade: " + item.Grade)
})
})
})
})
</script>
答案 0 :(得分:3)
答案非常简单:来到客户端的所有内容都应该是公开的,并且可供客户使用。
你不应该在客户端实现任何“加密”,老实说,你将无法做到这一点,因为客户端也可以读取你的JavaScript,包括加密算法和密钥。
您应该只向视图提供公开数据,这样您就不会为其披露而烦恼。
您可以创建ViewModel并传递它。视图模型仅表示要在视图/页面上显示的数据
例如,实现类StudentViewModel
,它与Student
相同,但仅根据您的数据模型和业务逻辑使用公共字段:
public class Student { /* Shouldn't be disclosed */
public int Id { get; set; }
public int Grade { get; set; }
public string PasswordHash { get; set; }
public string Email { get; set; }
}
public class StudentViewModel { /* Why should I be worried about ids and grades? */
public int Id { get; set; }
public int Grade { get; set; }
}
然后,您可以安全地返回StudentViewModel
数组而不用担心它。用户将在他的HTML中看到ID和成绩,如果他查看开发人员工具网络日志 - 他将看到ID和成绩,没有别的。
答案 1 :(得分:1)
我建议使用ssl进行通信。确保http连接是安全的,即它是http(安全)。并启用某种形式的身份验证,以确保除了目标人员(经过身份验证的人)之外,没有人可以调用webapi调用来检索数据。
这样任何拦截请求的人都无法以纯文本格式查看数据。
这可以仅仅是配置Web应用程序(即没有代码更改),也不会对JavaScript代码进行任何更改。
请查看以下内容以获取有关保护webapi的更多详细信息 http://www.asp.net/web-api/overview/security