我是解析新手,对解析用户“表”中数据的安全性有疑问。我想将附加数据与用户数据一起存储。例如,电话号码。但默认情况下,解析将用户表设置为任何人都具有读取权限。因此,如果有人点击我的解析 api,他们将能够获得所有用户及其电话号码的列表。显然这不是很安全。那么我应该设置用户对象以便任何人都无法读取它们吗?或者我应该将我的详细信息存储在不同的表中?相关的是,我还认为对于任何人来说都能够基本上转储我的所有用户默认列也是很奇怪的。现在,任何拥有我的 API 密钥的人都可以获取所有用户及其电子邮件地址。我是否遗漏了一些关于这是多么不安全的事情?
你的担忧是非常有道理的。 Parse数据库的默认权限配置方便发展,因此无需进一步配置,任何人都可以轻松转储所有用户。不幸的是,当不同的默认值会立即使许多应用程序更加安全时,真正的安全性需要相当大的努力。
请参阅此博客文章,了解用户转储有多么容易的示例:https://www.webniraj.com/2013/08/01/using-the-parse-javascript-sdk-be-careful/ https://www.webniraj.com/2013/08/01/using-the-parse-javascript-sdk-be-careful/
每个对象的 ACL 无法提供已被类级别权限拒绝的访问权限,因此即使您不想要任何可公开访问的用户数据,也需要以以下方式配置 Parse User 类的公共类级别权限:允许 SDK 与它们交互:
- 客户端需要公共“Get”才能刷新当前用户。
- 需要公共“创建”才能注册用户。
- 需要公开“更新”才能设置用户名和密码。
然后,使用用户 ACL 进一步限制这些公共权限。内置 User 类分配有一个默认 ACL,具有公共读取和私有读写(针对特定用户)。我不需要为用户提供公共 Read 读取,因此在 afterSave Cloud Code 挂钩中,我将 ACL 更改为私有读写。实际上,我什至不需要私有写入访问权限,因为我打算使用 Cloud Code 进行用户更新,但 ACL 始终返回私有读写权限。
我不需要搜索其他用户的能力,因此我禁用了公共“查找”,这是防止转储所有用户信息的快速修复方法。虽然风险较小,并且需要特定的对象 ID,但公共“Get”仍然可能被滥用,这就是我从用户 ACL 中删除公共读取的原因。
UPDATE:
配置类级别权限 (CLP) 以公开允许操作并不一定意味着任何数据都可以公开访问。这些 CLP 指定可以从任何客户端 SDK 在数据库的每个类上运行哪些操作(这就是“公共”的含义 - 使用“私有”主密钥仍然可以覆盖所有内容)。然后,每个对象上的 ACL 指定哪些操作允许用户/角色读取和写入该对象。我强烈建议您阅读他们关于安全性的 5 部分博客文章,以了解 CLP 和对象级 ACL 之间的交互:解析博客:安全性 http://blog.parse.com/learn/engineering/parse-security-i-are-you-the-key-master/
CLP 允许您锁定客户端对数据库中整个类的访问。例如,我有一个仅由云代码使用的类,因此我禁用了所有 CLP(防止任何客户端 SDK 读取或写入这些对象),然后云代码使用主密钥覆盖 CLP 以在服务器上使用。我也有面向客户的,但对象是用户私有的。这些具有公共 Get 和 Find CLP,但通过仅针对该用户的私有读写 ACL 来保护该用户。
Parse 最近还添加了“指针权限”,这看起来有助于限制对每个对象“所有者”的访问,但我个人没有使用过这些:解析指针权限 https://parse.com/docs/ios/guide#security-pointer-permissions
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)