23

最近我发现parse.com是多么有用和简单。它确实加快了开发速度,并为您提供了一个现成的数据库来存储来自您的网络/移动应用程序的所有数据。

但它有多安全?据我了解,您必须将您的应用程序私钥嵌入代码中,从而授予对数据的访问权限。

但是,如果有人能够从您的应用程序中恢复密钥怎么办?我自己试过了。我花了 5 分钟从标准 APK 中找到私钥,而且还可以使用硬编码在您的javascript 源代码中的私钥构建一个 Web 应用程序,几乎任何人都可以看到它。

保护我发现的数据的唯一方法是 ACL ( https://www.parse.com/docs/data ),但这仍然意味着任何人都可以篡改可写数据。

任何人都可以启发我吗?

4

4 回答 4

18

与任何后端服务器一样,您必须防范潜在的恶意客户端。Parse 有几个安全级别来帮助你。

正如您所说,第一步是ACLs 。您还可以更改数据浏览器中的权限,以禁止未经授权的客户端创建新类或向现有类添加行或列。

如果该级别的安全性不满足您的要求,您可以通过Cloud Functions代理您的数据访问。这就像创建一个虚拟应用程序服务器以在您的客户端和后端数据存储之间提供一层访问控制。

于 2012-11-11T20:31:54.180 回答
3

在我只需要向 Web 应用程序公开用户数据的小视图的情况下,我采用了以下方法。

一种。创建一个包含安全对象字段子集的辅助对象。

湾。使用 ACL,使安全对象只能从适当的登录名访问

C。使辅助对象公开读取

d。编写一个触发器以使辅助对象与主对象的更新保持同步。

我大部分时间也使用云函数,但是当您需要一些灵活性时,这种技术很有用,并且如果辅助对象是多个安全对象的视图,它可能比云函数更简单。

于 2015-02-24T14:07:31.793 回答
0

我所做的是以下。

  1. 限制所有类的公共读/写。访问类数据的唯一方法是通过云代码。
  2. 使用参数验证用户是登录用户request.user,用户会话是否为空,对象 id 是否合法。
  3. 验证用户后,我将允许使用主密钥检索数据。
于 2015-09-19T16:54:30.340 回答
0

只需严格控制全局级别安全选项(客户端类创建等)、类级别安全选项(例如,您可以禁用客户端删除 _Installation 条目。禁用所有类的用户字段创建也很常见。 ),最重要的是,请注意 ACL。

通常我使用 beforeSave 触发器来确保 ACL 始终正确。因此,例如,_User 对象是恢复电子邮件所在的位置。我们不希望其他用户能够看到彼此的恢复电子邮件,因此 _User 类中的所有对象都必须仅对用户进行读写设置(public read false 和 public write false)。

这样只有用户自己可以篡改自己的行。其他用户甚至不会注意到该行存在于您的数据库中。

在某些情况下进一步限制这一点的一种方法是使用云功能。假设一个用户可以向另一个用户发送消息。您可以将其实现为一个新类 Message,其中包含消息的内容,以及指向发送消息的用户和将接收消息的用户的指针。

由于发送消息的用户必须能够取消它,并且由于接收消息的用户必须能够接收它,因此两者都需要能够读取该行(因此ACL必须对它们都具有读取权限)。但是,我们不希望它们中的任何一个篡改消息的内容。

所以你有两种选择:要么创建一个 beforeSave 触发器,在提交之前检查用户尝试对此行所做的修改是否有效,或者你设置消息的 ACL 以便没有人拥有写权限,然后你创建云功能验证用户,然后使用主密钥修改消息。

重点是,您必须为应用程序的每个部分都考虑这些因素。据我所知,没有办法解决这个问题。

于 2015-12-11T17:19:16.430 回答