Parse 伺服器安全性

大家好,本文将讨论在 Back4App 上使用 Parse Server 时的安全问题。由于安全问题并不是一个能让开发人员开心的话题,所以我会非常简洁直接。我在这里的目的是提供一个快速安全检查清单,以便在制作应用程序之前对其进行审查。

Parse安全机制

为了正确地为应用程序配置足够的安全访问权限,你应该首先了解一些 Parse 基本安全机制概念、默认 Parse 类和 Auth 机制。

1-Parse默认类

Parse 默认创建 3 个类:用户、角色和会话。这些类与整个后台完全集成,在配置身份验证机制以保护应用程序时也会让您的工作变得更轻松。

用户

Parse 提供了一个名为Parse.User专门用户类,可以自动处理用户账户管理所需的大部分功能。

默认情况下,Parse.User类是安全的。存储在Parse.User中的数据只能由该用户修改。默认情况下,任何客户端仍可读取数据。因此,有些Parse.User对象是经过验证的,可以修改,而有些则是只读的。

角色

角色是一个类,您可以将用户和其他角色关联到一个新角色中。创建角色后,就可以使用 CLP 和 ACL 来定义该角色在应用程序中的访问权限。

会议

当你通过用户登录方法登录一个用户时,Parse 会自动在你的 Parse 服务器中创建一个新的无限制会话对象。注册和 Facebook/Twitter 登录也是如此。

2-Parse认证机制

说到 Parse 上的数据访问,你可以在两个不同的层面上控制你的应用程序安全:

  1. 类/表 – 使用 CLP(类级权限)来限制新列的创建和整个类的一般数据访问;
  2. 对象- 使用 ACL(访问控制列表)控制特定对象的访问;

类级权限 – CLP

类级权限是一种控制类及其所有对象访问权限的机制。使用 CLP 可以配置对角色、用户或指针的读/写访问权限。

使用该机制,您可以限制对以下操作的访问:

  • 读取
    • Get – 获取给定 ObjectId 的对象信息;
    • Find – 查询该类中的所有对象(无需对象 ID);
    • Count – 类对象总数;
  • 写入
    • 创建 – 创建新对象;
    • Update – 更新现有对象;
    • Delete – 删除现有对象;
  • 添加
    • 添加字段 – 在本类中创建新列;

要访问这些配置选项,请点击右上角快速菜单中的小盾牌图标。

点击屏蔽图标后,您将看到一个简单的菜单,其中只有读/写选项。点击窗口右上方的图标,进入高级 CLP 配置。

然后您将看到完整的 CLP 配置窗口。

访问控制列表 – ACL

通过访问控制列表,可以对给定类中每个对象的访问进行不同的控制。您可以为对象创建ACL,并为每个角色或用户配置访问权限(读/写)。

Parse 创建任何角色都需要ACL。因此,创建第一个角色需要一个用户。让我们创建一个根用户,以便在应用程序中创建第一个角色。该用户将是唯一可以编辑这些角色的用户。

首先,我们可以在用户表中创建根用户,只需填写用户名和密码即可。

然后复制根用户 ObjectId 并转到角色类。创建一个新角色,然后双击 ACL 字段以创建 ACL。在本例中,我将允许根用户读/写此 ACL,因此让我们用根用户 ObjectID 填充 ACL,然后保存。

完成这一步后,我们给这个角色命名为 “管理员”,并关联用户 Alex 和 Alysson。由于角色类与用户类有关系,因此可以点击概述关系,然后将要添加的用户的对象 ID 添加到此关系中。

点击查看关系
填写用户对象 ID 列表用逗号分隔
查看最终结果

现在你有了一个角色管理员,有 2 个用户,你可以用它来创建新角色,为新的ACL或 CLP 赋予属性。

安全应用程序检查清单

现在你已经熟悉了 Parse 的主要安全概念,我想给你一些建议,让你的应用程序更安全。

1-妥善保管万能钥匙

主密钥是绕过所有其他安全层的 Parse 机制。一个很好的比喻是,拥有应用程序主密钥就好比拥有了服务器的根权限。

因此,您必须保护该密钥,必要时只能通过云代码使用该密钥。您应避免在前端代码中使用密钥,因为有人可以反编译,或者在 JS 的情况下,直接点击查看源代码并复制您的密钥。

另一个建议是,在云代码中使用该密钥时,确保不会将密钥(云代码的一部分)提交到任何公共代码库中。

2-取消检查客户端类创建

在 Back4App 上创建新应用程序时,会启用 Parse Key allowClientClassCreation。这意味着任何拥有 AppID 和客户端密钥的人都可以在您的数据库中创建新的类。

您可以在 Back4App 上的服务器设置->核心设置->设置菜单选项中更改此配置。

如下图所示,向下滚动并取消选中 “允许创建客户端类 “选项即可。

这里的建议是,在开发应用程序时保持启用该选项,一旦开发完成就将其移除。

3-创建角色结构

正如我们在 ACL 部分所做的介绍,您可以继续建立角色结构,以便更好地控制对所有应用程序类和对象的访问。比方说,您正在构建一个 Uber-Clone 应用程序,其中有 3 个主要访问权限:管理员、乘客、司机。

4-为用户和角色配置 CLP

由于 User 是默认的 Parse 类,因此任何人只要拥有类名、REST API 密钥和 App ID,就能通过一条 curl 命令请求所有用户列表:

curl -X GET -H "X-Parse-Application-Id:FyebII2zNpA2i9DdZ8froWna9vIvJMcgjfmjS0iK" -H "X-Parse-REST-API-Key: hluEgfZ084RdR0MyyE8Y9v4RwsOsTIWlJeCc4qGw" https://parseapi.back4app.com/users

并检索用户列表:

您可以创建 CLP 并限制读/写用户表的权限(也可以使用 ACL 进行保护)。在本例中,我只允许管理员用户读取完整的用户列表。

您可以对角色类进行类似处理,删除不需要读取完整类的角色/用户的访问权限。

会话类默认受保护,因为所有会话对象都有一个自动创建的 ACL,只能由该用户读写。

5-使固定类只读

如果你有只想通过 Parse Dashboard 进行更改的表格/类,你可以使用 CLP 将其设置为只读。在我的例子中,我创建了一个类来定义我的 Uber-Clone 应用程序要运行的城市。

我只想通过 Parse Dashboard 更改这个类,所以我要删除所有其他角色的写入访问权限。

6 一般 CLP 和 ACL 建议

应用程序中的大多数类都属于几种易于保护的类别之一。对于完全公开的数据,您可以使用类级权限来锁定表,使其公开可读和不可写。对于完全私有的数据,可以使用 ACL 来确保只有拥有数据的用户才能读取。

但偶尔也会遇到不希望数据完全公开或完全私有的情况。例如,你可能有一个社交应用程序,在这个应用程序中,用户的数据只能让他们认可的朋友读取。在这种情况下,你需要结合本指南中讨论的各种技术,以实现你想要的共享规则。

详情请查看如何创建 ACL的视频。

7-设置会话长度(仅适用于部分情况)

如果您开发的应用程序涉及非常敏感的信息(银行应用程序、医疗保健应用程序),您可能需要在短时间后注销用户。

要限制会话长度,请进入服务器设置->自定义应用程序设置。

在自定义Parse选项文本框中定义会话长度(以秒为单位)。在下面的例子中,我定义的会话长度为 10 分钟。然后点击保存。

8-使用 Https 和 SSL

Https 是一种从客户端浏览器向服务器传输信息的安全协议。这是防止黑客通过MITM 等攻击获取敏感信息的必要手段。

这里的建议是使用 Https over Http 与 Parse 服务器建立连接。下面是一个使用 JS 与 Parse 连接的示例,展示了如何正确使用 https 来建立活动连接。请注意,错误的方法是使用 http:// 而不是 https://。

Parse.initialize("APP_ID", "JS_KEY");
Parse.serverURL='https://parseapi.back4app.com/'

如果您使用的是 Back4App Webhosting,请注意 Back4App 已默认提供 https 连接(您必须在通话中使用 https://!)。

但是,如果您想使用自己的域名并重定向到 Back4App 服务器,请确保您的 SSL 证书有效并已正确安装,而且您使用 https 重定向到 Back4App。

最后的话

Back4App 和 Parse 为您提供了多种在云中保护数据安全的方法。在您构建应用程序并评估将要存储的数据类型时,您可以决定选择哪种实现方式。

我们希望您能使用这些工具,竭尽全力保护您的应用程序数据和用户数据的安全。我们一起努力,让网络变得更加安全。


Leave a reply

Your email address will not be published.