c# - 在 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我知道密码应该被加密,如果这是一个不好的问题,对不起。
解决方案
这个问题读作“我创建了一个可公开访问的 API 端点,它输出我的整个用户表;为什么 API 如此不安全?” . 你为什么首先创建这个操作?它解决了什么问题?当我在我的房子里挖了一个人类大小的洞时,我可以合理地抱怨几天后我的电脑和电视被偷了吗?
对于每个 API 端点,您必须考虑:
- 我需要这个吗?我真的无法弄清楚为什么您需要所有用户的列表。
- 我是否需要将其公开访问,还是应仅限于本地主机流量(即基础设施)?
- 当可公开访问时,谁可以访问它(授权)?
- 调用时,它应该返回其数据源中的所有列,还是应该有某种映射?
不,密码不需要加密,它们需要散列。使用 ASP.NET Identity 进行身份验证,不要自己滚动。
推荐阅读
- python - 在排序一个列表期间将不同列表中的相关元素保持在一起
- c# - 如何对通用列表对象进行排序
- javascript - 向和从 js 服务器发送数据的基本方法?
- json - 使用 Pyspark 处理 JSON 结构
- amazon-web-services - 为什么角色假设应该在 lambda 内部完成?
- html - 如何将数值绑定到 CSS 以创建时间线?
- docker - 如何为 docker compose 环境变量设置运行时变量
- javascript - 仅在 Javascript 中具有不同段落的动态 Div
- tsql - 表格模型中的测量列未在浏览器中显示正确的值
- javascript - 调用此函数时如何获取返回值?