首页 > 解决方案 > 在 asp.net web api 响应中保护用户数据

问题描述

我对 ASP.NET Web API 完全陌生。我做了一些研究,但我无法找到我的问题的答案。我开始对如何保护正在响应调用者的数据感到非常困惑。我的总体目标是创建一个 ASP.NET MVC Web 应用程序和一个 Xamarain Android 应用程序,允许用户注册和登录帐户并将他们的数据存储在 MySQL 数据库中。我认为 Web API 将是一个很好的解决方案,因为两个应用程序都可以调用函数来获取用户集合、单个用户,并通过 HTTPPost、HTTPGet 请求将新用户放入数据库。

到目前为止,我已经创建了一个带有一个控制器和一个 HTTPGet 请求的 ASP.NET Web API,该请求从数据库中返回所有用户。当我运行它时,我会得到所有用户详细信息的响应。

我的控制器代码

public class UsersController : ApiController
    {
        // GET api/values
        [HttpGet]
        public IEnumerable<Users> Get()
        {
            using (NorthYorkshireContext context = new NorthYorkshireContext())
            {
                return context.Users.ToList();
            }
        }
    }

我的回复: 在此处输入图像描述

如果我要将它部署到服务器上,是什么阻止了任何人查看所有用户的详细信息?例如,如果我将它部署到http://mydomain.co.uk,是什么阻止了任何人查询 API,例如http://mydomain.co.uk/api/users并查看所有详细信息?

PS我知道密码应该被加密,如果这是一个不好的问题,对不起。

标签: c#asp.netjsonasp.net-web-api

解决方案


这个问题读作“我创建了一个可公开访问的 API 端点,它输出我的整个用户表;为什么 API 如此不安全?” . 你为什么首先创建这个操作?它解决了什么问题?当我在我的房子里挖了一个人类大小的洞时,我可以合理地抱怨几天后我的电脑和电视被偷了吗?

对于每个 API 端点,您必须考虑:

  • 我需要这个吗?我真的无法弄清楚为什么您需要所有用户的列表。
  • 我是否需要将其公开访问,还是应仅限于本地主机流量(即基础设施)?
  • 当可公开访问时,谁可以访问它(授权)?
  • 调用时,它应该返回其数据源中的所有列,还是应该有某种映射?

不,密码不需要加密,它们需要散列。使用 ASP.NET Identity 进行身份验证,不要自己滚动。


推荐阅读