【问题标题】:Parse User object ACL解析用户对象 ACL
【发布时间】:2015-01-17 00:32:16
【问题描述】:

我是解析新手,对解析用户“表”中数据的安全性有疑问。我想将其他数据与用户数据一起存储。例如,电话号码。但默认情况下,解析将用户表设置为对任何人都具有读取权限。因此,如果有人只是点击我的解析 api,他们将能够获得所有用户及其电话号码的列表。显然这不是很安全。那么我应该设置用户对象,以便任何人都无法读取它们吗?或者我应该将我的详细信息存储在不同的表中吗?相关,我也认为任何人都能够基本上转储我所有用户的默认列是很奇怪的。现在任何拥有我的 API 密钥的人都可以获取所有用户及其电子邮件地址。我是否在这里遗漏了一些关于这是多么不安全的事情?

【问题讨论】:

  • 我建议将私有数据存储在其他类中,并将对象与特定用户相关联。
  • 你找到答案了吗?我知道 _User 类确实内置了一些默认安全性,但是如果可能的话,您实际上能够转储所有用户名和电子邮件地址的问题令人担忧。用户安全文档:parse.com/docs/ios_guide#users-security/iOS
  • 不。一直没有得到明确的答案。仍在努力寻找处理此问题的最佳方法。猜猜最好的选择是开始玩设置。我注意到您可以取消债务并找到用户对象的权限,但即使更改这些权限,文件夹权限也会仅保留在实际用户行上。因此任何现有的项目级别权限似乎都不受影响。对我来说,这可能没问题,因为我实际上还没有任何真正的用户。但这对于已经建立的应用程序来说可能是一个真正的问题。
  • 您好,我对 Parse 还很陌生,我正在努力解决同样的问题。您对此有解决方案吗?我注意到的另一件事是,一旦显示用户列表,任何人都可以查询“会话”表并检索“会话令牌”(我计划将其用作 AuthorizationToken)。有什么帮助吗?

标签: api security rest parse-platform


【解决方案1】:

你的担忧是有道理的。 Parse 数据库的默认权限配置为便于开发,因此无需进一步配置,任何人都可以轻松转储所有用户。不幸的是,当不同的默认设置会立即使许多应用程序更加安全时,真正的安全需要相当大的努力。

有关用户转储有多简单的示例,请参阅此博客文章:https://www.webniraj.com/2013/08/01/using-the-parse-javascript-sdk-be-careful/

每个对象的 ACL 无法提供已被类级别权限拒绝的访问权限,因此即使您不想要任何可公开访问的用户数据,也需要配置 Parse User 类的公共类级别权限一种允许 SDK 与其交互的方式:

  • 客户端需要公共“Get”才能刷新当前用户。
  • 需要公开“创建”才能注册用户。
  • 需要公开“更新”才能设置用户名和密码。

这些公共权限随后会通过用户 ACL 进一步限制。内置的 User 类被分配了一个默认的 ACL,具有公共读取和私有读写(针对特定用户)。我不需要用户的公共读取读取,因此在 afterSave 云代码挂钩中,我将 ACL 更改为私有读取。因为我打算使用 Cloud Code 进行用户更新,所以我实际上什至不想要私有写入访问权限,但 ACL 总是返回私有读写。

我不需要搜索其他用户的能力,所以我禁用了公共“查找”,这是防止所有用户信息被转储的快速修复。尽管风险较小,并且需要特定的对象 ID,但公共“Get”仍然可能被滥用,这就是我从用户 ACL 中删除公共读取的原因。

更新:

将类级别权限 (CLP) 配置为公开允许操作并不一定意味着任何数据都可以公开访问。这些 CLP 指定可以从任何客户端 SDK 对数据库的每个类运行哪些操作(这就是他们所说的“公共”——使用“私有”主密钥仍然可以覆盖所有内容)。然后,每个对象上的 ACL 指定哪些允许用户/角色读取和写入该对象。我强烈建议阅读他们关于安全性的 5 部分博客文章,以了解 CLP 和对象级 ACL 之间的交互:Parse Blog: Security

CLP 允许您锁定客户端对数据库中整个类的访问。例如,我有一个类仅供云代码使用,所以我禁用了所有 CLP(防止任何客户端 SDK 读取或写入这些对象),然后云代码使用主密钥覆盖 CLP 以在服务器上使用.我也有面向客户但对用户私有的对象。它们具有公共的 Get 和 Find CLP,但通过仅针对该用户的私有读写 ACL 对用户进行保护。

Parse 最近还添加了“指针权限”,这看起来有助于限制对每个对象的“所有者”的访问,但我没有亲自使用这些:Parse Pointer Permissions

【讨论】:

  • 您对 _User 所需的公共获取、创建、更新权限有多大把握?如果是这样,Parse 似乎会让您在安全方面遇到麻烦,首先鼓励将电子邮件用作用户名,然后要求 _Users 是公开的 Get-able。这意味着如果一个用户与Message 相关联,那么只需说'include('user')' 就可以得到该用户的电子邮件。我拼命想让 _User 尽可能私密。但这看起来不是一个好主意!
  • 我在 ParseUI 上写了一个问题:github.com/ParsePlatform/ParseUI-iOS/issues/200
  • @fatuhoku 更新了对 CLP 和 ACL 交互的扩展说明。
  • 我很惊讶地发现新用户对象默认获得公共读取访问权限...
【解决方案2】:

我花了一些时间来解决这个问题。对于初学者,您将希望禁用新类的创建,然后将每个类的 ACL 设置为(最多)只读。您可能还想关闭阅读。

见https://parse.com/docs/data#security-classes

然后您需要设置一些角色和用户并适当地设置 ACL。您不能真正通过数据浏览器有效地设置 ACL/角色/用户,但需要以编程方式执行此操作。我一直在使用 REST API 和一些 curl sn-ps 进行实验。

见https://parse.com/docs/rest#roles

【讨论】:

  • 谢谢,但我想我总体上理解解析的安全性。我的问题更具体地询问有关内置用户表的建议。
  • 我认为GET权限的要求是让那些想要保护用户电子邮件地址的人头疼的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多