我是REST API的新手,我实际上并不是在寻找任何解决方法,我只需要清除我的概念,因为我知道我遗漏了一些非常重要的信息,可以很容易地解决我的问题。
对于E.g我做了一个小网站,让我们说使用angular.js,我将列出一些信息或一些项目。
现在把它看作一个开放的网站,每个人都得到相同的列表。任何人都可以访问该页面并查看项目列表。简单。
让我们说这个列表的URL是
https://www.example.com/api/list/v1
结果返回
1. abc
2. cde
3. efg
4. hij
完美!
现在我的网站获得了流量,我决定在我的网站上实现用户功能,以便每个用户只能看到自己的信息。
所以我把剩下的api url更改为:
https://www.example.com/api/list/v1/12345 其中12345是用户ID。
具有用户ID的用户来到网站,登录并浏览列表,他偶然去了页面的源,他找到了列出信息的URL。 他复制了网址并开始使用不同的用户ID,他可能随时都会幸运。
我现在不是在谈论实现任何类型的安全性,必须有几种方法来保护它。 我主要担心的是,这不是一个大的安全漏洞,或者我们可以称之为邀请,进行注射吗?
所以我只想清楚自己的理解,我错了?
由于
答案 0 :(得分:1)
这不是一些安全漏洞。这是它应该工作的方式。
让我们放弃API的情况。考虑一下简单的例子::
我有一个网址:www.example.com/jobs/java/
这将列出我网站上的所有工作。访问此数据不需要任何身份验证或许可。我将它提供给访问我网站的每个用户。现在我需要一种方法来确定访问我网站的用户是否想要过滤我网站上可用的工作。所以我在url kwargs中提供了这个选项。这看起来像::
devel
因此,现在该列表将仅包含Java作业的数据。简单明了。
现在有一天我决定只让注册用户查看Java Jobs。所以,我在我的View中引入了一个新的检查,只有当你登录我的网站时才能访问java作业。否则,它会将您重定向到登录页面。根据要求,您对发送给用户的数据设置了限制。
API的情况也是如此。如果您允许任何使用API的用户可以使用该数据,那么您的设计存在缺陷,而不是API的概念。 API只是您逻辑的实现。
如果您不希望ID为12345的用户访问ID为123的用户的数据,则必须限制API代码的权限。你必须自己处理。 API将响应您的代码。
希望这能清除一切。