【发布时间】:2019-05-06 21:16:58
【问题描述】:
我开始学习 Angular,我注意到我对后端的每个调用都可以从开发人员工具中看到。所以当我得到这样的方法/功能时:
getUser(userId){
return this.http.post('server/page/get-user', {id:userId});
}
然后在某些组件中我会这样称呼它:
this.userService.getUser(2).subscribe((data)=> {
console.log(data)
})
根据发布的用户 ID 基本上返回用户信息(姓名、地址等)。如果想获取随机的用户信息,难道他们不能只是对这个端点进行 API 调用,在请求有效负载中使用随机数并获取该用户信息吗?
我读到了解决此问题的一种方法是使用 JWT,它基本上加密了有效负载,但是没有选项可以让这个 api 调用仅在我的应用程序中可用吗?或者至少让它对开发者工具隐藏?
【问题讨论】:
-
您可以使用
debounceTime运算符来避免您的门户发送垃圾邮件。您的 API 可以接受带有令牌的不记名标头,这样只有拥有此令牌的人才能发出请求。这只是基本的。 -
Web 开发中关于安全性的第一条规则是您无法控制客户端。即使你可以从 devtools 中隐藏它,我也可以使用其他工具来查看所有请求
-
如果你不通过服务器上的某种身份验证机制和访问控制来保护你的 API,那么每个人都可以使用它来获取各种信息。
-
我不得不为 Angular Universal 重新设计我的 Angular 应用程序,现在我还重新设计了 API 的工作方式。基本上我必须在 API 中定义标头以允许我的应用程序访问它。现在我想知道,我不能使用类似的东西来阻止人们从外部访问我的 API 吗?使用我当前的设置,人们可以复制 API 端点并在 Chrome 中打开它并获取公共信息,但是一旦他们尝试在他们的应用程序中使用该端点,由于 CORS,它不会返回任何信息。我不知道这是否真的像我想的那样有效,但这只是我想到的。
标签: angular