我是新手解析,并且在解析用户“表”中有关于数据安全性的问题。我想存储其他数据以及用户数据。例如,电话号码。但默认情况下,解析将用户表设置为对任何人都具有读取权限。因此,如果有人只是点击我的解析api,他们将能够获得所有用户及其电话号码的列表。显然这不是很安全。那么我应该设置用户对象,以便任何人都无法阅读它们?或者我应该将我的详细信息存储在另一个表中?相关,我也认为任何人都能够基本上转储我的所有用户默认列也很奇怪。现在任何拥有我的API密钥的人都可以获得所有用户及其电子邮件地址。我在这里错过了一些关于这是多么不安全的事情吗?
答案 0 :(得分:7)
您的担忧非常有效。 Parse数据库的默认权限配置为轻松开发,因此无需进一步配置,任何人都可以转储所有用户。不幸的是,当不同的默认值会立即使许多应用程序更加安全时,真正的安全性需要相当大的努力。
请参阅此博客文章,了解用户转储的简易程度示例:https://www.webniraj.com/2013/08/01/using-the-parse-javascript-sdk-be-careful/
每个对象的ACL无法提供已被类级别权限拒绝的访问权限,因此即使您不希望任何可公开访问的用户数据,也需要配置Parse User类的公共类级别权限。一种允许SDK与它们交互的方式:
然后使用用户ACL进一步限制这些公共权限。内置的User类被分配了一个带有公共读取和私有读写的默认ACL(针对特定用户)。我不需要为用户提供公共读取读取,因此在afterSave Cloud Code挂钩中,我将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
答案 1 :(得分:2)
我花了一些时间来解决这个问题。对于初学者,您将要禁用新的类创建,然后在每个类的基础上设置ACL(最多)是只读的。您可能还想关闭读取。
请参阅https://parse.com/docs/data#security-classes
然后,您需要设置一些角色和用户并适当地设置ACL。您无法通过数据浏览器有效地设置ACL /角色/用户,但需要以编程方式执行此操作。我一直在使用REST API和一些卷曲片段进行实验。