最近我发现parse.com是多么有用和简单。 它确实加快了开发速度,并为您提供了一个现成的数据库来存储来自您的网络/移动应用程序的所有数据。
但它有多安全?据我所知,您必须在代码中嵌入您的应用私钥,从而授予对数据的访问权。
但是,如果有人能够从您的应用中恢复密钥怎么办?我亲自尝试过。我花了5分钟从标准APK中找到私钥,并且还有可能在javascript source中使用私钥进行硬编码的网络应用程序,几乎任何人都可以看到它。
保护我发现的数据的唯一方法是ACL(https://www.parse.com/docs/data),但这仍然意味着任何人都可以篡改可写数据。
有人可以开导我吗?
答案 0 :(得分:18)
与任何后端服务器一样,您必须防范潜在的恶意客户端。 Parse有几个级别的安全性来帮助你。
正如你所说,第一步是ACLs。您还可以在数据浏览器中更改permissions,以禁止未经授权的客户端创建新类或向现有类添加行或列。
如果该级别的安全性不能满足您的要求,您可以通过Cloud Functions代理您的数据访问权限。这就像创建一个虚拟应用程序服务器,在客户端和后端数据存储之间提供一层访问控制。
答案 1 :(得分:3)
在我只是需要向网络应用程序公开用户数据的小视图的情况下,我采取了以下方法。
一个。创建一个包含安全对象字段子集的辅助对象。
湾使用ACL,只能从适当的登录
访问安全对象℃。使辅助对象公开读取
d。编写一个触发器,以使辅助对象与主数据库的更新保持同步。
我大多数时候也使用云函数,但是当你需要一些灵活性时这种技术非常有用,如果次要对象是多个安全对象的视图,这种技术可能比云函数更简单。
答案 2 :(得分:0)
我做的是以下内容。
request.user
验证用户是否为登录用户,以及用户会话是否为null且对象ID是否合法。答案 3 :(得分:0)
只需严格控制您的全局级安全选项(客户端类创建等),类级别安全选项(例如,您可以禁用客户端删除_安装条目。它也常见于禁用为所有类创建用户字段。),最重要的是,注意ACL。
通常我使用beforeSave触发器来确保ACL始终正确。因此,例如,_User对象是恢复电子邮件所在的位置。我们不希望其他用户能够看到彼此的恢复电子邮件,因此_User类中的所有对象必须只对用户进行读写设置(公共读取为false且公共写入为false)
这样只有用户自己才能篡改自己的行。其他用户甚至不会注意到您的数据库中存在此行。
在某些情况下进一步限制此问题的一种方法是使用云功能。假设一个用户可以向另一个用户发送消息。您可以将此实现为新类Message,包含消息内容,以及指向发送消息的用户以及将接收消息的用户的指针。
由于发送消息的用户必须能够取消它,并且由于收到消息的用户必须能够接收消息,因此两者都需要能够读取此行(因此ACL必须具有读取权限他们都)。但是,我们不希望其中任何一个篡改邮件的内容。
因此,您有两种选择:要么创建一个beforeSave触发器,检查用户在提交之前尝试对此行进行的修改是否有效,或者设置消息的ACL以便没有人具有写权限,然后创建验证用户的云功能,然后使用主密钥修改消息。
重点是,您必须为应用程序的每个部分进行这些考虑。据我所知,没有办法解决这个问题。