【问题标题】:API Authorization Allowing Public Create Actions Risks?API 授权允许公共创建操作风险?
【发布时间】:2013-11-30 08:19:33
【问题描述】:

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

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

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

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

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

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

公开我的意思是任何无论是谁都可以创建一个新成员。但是,一旦创建此记录,只有所有者(创建它的用户)才能读取或更新它。

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

我可以看到正在为我的用户创建大量假会员,但我认为无法阻止这种情况

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

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

【问题讨论】:

  • 如果您唯一的选择是通过客户端创建成员,那么我认为您的选择是可以的。您只需要限制可以从同一 IP 创建的用户数量,并删除那些在 48-72 小时内未登录的用户。至少那是我会做的。运行一个 cron 作业,删除所有在一定时间内从未登录的人(可能是假成员),并将每个 IP 的成员数量限制为,比如说 - 10。这样你就不会被脚本小子通过 JS 发送垃圾邮件控制台,但您可以让同一网络 (IP) 中的人们在需要时创建几个帐户。
  • @Fratyr 感谢您的回复。老实说,这是我能想到的唯一选择,但我愿意接受其他建议。验证匿名用户确实是我要问的,但那有什么意义呢?

标签: javascript python api security


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 2017-08-10
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多