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

本文关键字:数据 Json 加密 ASP NET MVC | 更新日期: 2023-09-27 18:21:21

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

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

答案很简单:到达客户端的所有东西都应该是公共的,并且对客户端可用。

你不应该在客户端实现任何"加密",老实说,你将无法做到这一点,因为客户端也可以读取你的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和级别,而不是其他。

我建议使用ssl进行通信。确保http连接是安全的,即它是http so(安全的)。并启用某种形式的身份验证,以确保除了目标用户(经过身份验证)之外,任何人都不能调用webapi调用来检索数据。

这样,任何拦截请求的人都无法将数据视为纯文本。

这可能只是配置web应用程序(即不更改代码),也绝对不更改JavaScript代码。

查看以下内容以获取有关保护webapi的更多详细信息http://www.asp.net/web-api/overview/security