parse.com 安全性
Posted
技术标签:
【中文标题】parse.com 安全性【英文标题】:parse.com security 【发布时间】:2012-10-30 13:38:48 【问题描述】:最近我发现parse.com 是多么有用和简单。 它确实加快了开发速度,并为您提供了一个现成的数据库来存储来自您的网络/移动应用程序的所有数据。
但它的安全性如何?据我了解,您必须将您的应用程序私钥嵌入代码中,从而授予对数据的访问权限。
但是,如果有人能够从您的应用中恢复密钥怎么办?我自己试过了。我花了 5 分钟从标准 APK 中找到私钥,并且还可以使用硬编码在您的 javascript source 中的私钥构建一个 Web 应用程序,几乎任何人都可以看到它。
我发现保护数据的唯一方法是 ACL (https://www.parse.com/docs/data),但这仍然意味着任何人都可能篡改可写数据。
谁能给我指点一下?
【问题讨论】:
这也与我有关。我找到了几个链接(parse.com/questions/… 和 parse.com/questions/javascript-sdk-security)。我认为 Parse 的 ACL 系统可能足够安全,可以满足我特定应用的需求,但我认为对于某些其他用途,我需要学习更多安全实践来尝试锁定。 【参考方案1】:与任何后端服务器一样,您必须防范潜在的恶意客户端。 Parse 具有多个安全级别来帮助您解决此问题。
如你所说,第一步是ACLs。您还可以在数据浏览器中更改permissions,以禁止未经授权的客户端创建新类或向现有类添加行或列。
如果您对该级别的安全性不满意,您可以通过Cloud Functions 代理您的数据访问。这就像创建一个虚拟应用程序服务器以在您的客户端和后端数据存储之间提供一层访问控制。
【讨论】:
这绝对是一个不同于传统的模型,“这是一个你可以隐藏在你的服务器端代码中的密钥,它可以让你做任何事情”,这不适用于 JavaScript 应用程序。 @bklimt 在这里涵盖的一般想法是,“亲爱的应用程序用户,在您登录之前,您不能做任何事情,一旦您登录,Parse 将根据我们制定的政策(ACL 和权限)限制您的活动您的帐户。” 这就是我喜欢云功能的原因!您可以过滤所有请求,并执行更多操作。【参考方案2】:在我只需要向网络应用程序公开用户数据的小视图的情况下,我采用了以下方法。
一个。创建一个包含安全对象字段子集的辅助对象。
b.使用 ACL,使安全对象只能通过适当的登录访问
c。使次要对象公开读取
d。编写一个触发器以使辅助对象与主对象的更新保持同步。
我大部分时间也使用云函数,但当您需要一定的灵活性时,这种技术很有用,并且如果辅助对象是多个安全对象的视图,它可能比云函数更简单。
【讨论】:
【参考方案3】:我做了以下事情。
-
限制所有类的公共读/写。访问类数据的唯一方法是通过云代码。
使用参数
request.user
验证用户是登录用户,以及用户会话是否为空且对象ID 是否合法。
验证用户后,我将允许使用主密钥检索数据。
【讨论】:
【参考方案4】:只需严格控制全局级别安全选项(客户端类创建等)、类级别安全选项(例如,您可以禁用客户端删除 _Installation 条目。禁用用户字段创建也很常见)所有类。),最重要的是,注意 ACL。
通常我使用 beforeSave 触发器来确保 ACL 始终正确。因此,例如,_User 对象是恢复电子邮件所在的位置。我们不希望其他用户能够看到彼此的恢复电子邮件,因此 _User 类中的所有对象都必须将读写设置为仅限用户(public read false 和 public write false)。
这样只有用户自己可以篡改自己的行。其他用户甚至不会注意到您的数据库中存在此行。
在某些情况下进一步限制这一点的一种方法是使用云功能。假设一个用户可以向另一个用户发送消息。您可以将其实现为一个新的 Message 类,其中包含消息的内容,以及指向发送消息的用户和将接收消息的用户的指针。
由于发送消息的用户必须能够取消它,并且由于接收消息的用户必须能够接收它,因此两者都需要能够读取该行(因此ACL必须具有读取权限)他们都)。但是,我们不希望它们中的任何一个篡改消息的内容。
因此,您有两种选择:要么创建一个 beforeSave 触发器,在提交之前检查用户尝试对此行所做的修改是否有效,要么设置消息的 ACL 以便没有人具有写入权限,然后创建验证用户的云函数,然后使用主密钥修改消息。
重点是,您必须为应用程序的每个部分都考虑这些因素。据我所知,这是没有办法的。
【讨论】:
以上是关于parse.com 安全性的主要内容,如果未能解决你的问题,请参考以下文章
Parse.com - 从 Parse.com 向 iOS 应用程序发送消息,不像推送通知
Kotlin/Parse:com.parse.ParseObject 不能转换为