加密ASP.NET MVC中Json发送的数据

时间:2015-11-10 07:39:59

标签: c# json ajax asp.net-mvc

我想通过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>

2 个答案:

答案 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