允许公共创建操作风险的 API 授权

API Authorization Allowing Public Create Actions Risks?

本文关键字:API 授权 许公共 创建 操作      更新时间:2023-09-26

我想知道我提出的是我拥有的系统的典型场景,还是我应该关注的关于 API 安全性的事情。

该系统是一个小部件,可以放置在任何网站上,允许通过API将成员添加到我的一个用户活动中。

Member Name
Member ID
Who the Member belongs to (user ID)

我有一个名为成员的 API 资源。每个成员都属于我的系统的一个用户。

我已经创建了如下表所示的授权。注意:通过授权,我的意思是"是否授予该用户执行此操作的权限",不要将其与身份验证(即访问 API)混淆):

==============  =======  =======  =======  =======
Resource        Create   Read     Update   Delete
==============  =======  =======  =======  =======
Member          Public   Owner    Owner    No
==============  =======  =======  =======  =======

我所说的公开是指任何人都可以创建一个新成员,无论有谁。但是,创建此记录后,只有所有者(为其创建记录的用户)可以读取或更新它。

我看不出有人如何解决创建记录公开的问题,因为这是通过我网站外部的 javascript 发生的,我无法控制(客户端)。我没有办法知道是谁。但是,在之后对该成员执行任何操作都需要用户登录到我的网站并获得控制权。

我可以看到发生的事情是为我的用户创建了很多虚假成员,但我认为无法阻止这种情况

有人会这样做不同还是我想太多了?

注意:添加了 Python 标签,因为它是一个 Python API,也许这会有所作为或不产生影响。 作为客户端添加的 Javascript 标签是脚本。如果没有或偏离主题,我将删除标签或问题。

该系统没有任何固有的缺陷,但并非无法规避。例如,如果某人很好,他们可以伪造一个 IP 地址,因此如果您只查看 IP 地址,则可以从一台计算机创建多个帐户。如果该人可以使用虚假身份证明,则很难防止多个帐户,但您可以尝试识别可能向虚假用户发出信号的活动或缺乏活动。解决虚假用户安全问题的最佳方法可能是让用户也必须提供电子邮件地址等信息,并限制一个电子邮件地址下的用户数量。这应该会大大减缓任何问题。如果你让他们"跳过箍",如果有人试图伪造账户,伪造就会变得更加困难,并且更容易追踪。如果您希望用户更加匿名,那么任何无法以电子方式创建或管理用户的行为都会有很大帮助,因此像验证码这样的东西会有所帮助。