如何在html应用程序中保护Parse的Rest API密钥

ltf*_*hie 5 javascript parse-platform

我一直在学习Angular.js并使用Parse作为后端服务.要将数据发布到Parse RESTful API,您可以在请求的标头中传递REST API密钥和App ID,如下所示:

var config = {headers: {"X-Parse-REST-API-Key":"someapikey", "X-Parse-Application-Id":"someappid"}};

$http.post("https://api.parse.com/1/classes/myobject", obj, config).success (
            function(data) {console.log(data);}
);
Run Code Online (Sandbox Code Playgroud)

虽然这非常适合学习,但我想知道用于Parse的RESTful API或任何其他后端即服务供应商如何在真正的html应用程序中工作.API密钥和应用程序ID将以JavaScript形式公开,任何足够智能查看源代码的人都可以修改您帐户的数据.

我可以将其映像为工作的唯一方法是使用添加到Api Key/App Id标头的代理服务器.但是,这会破坏不必运行自己的后端服务器的目的.我在这里错过了什么吗?

Dre*_*win 20

这是你错过的:)

Parse.com REST/JavaScript密钥被设计为"非常疯狂".使用这些密钥,无法绕过对象访问规则或之前保存验证.只有主密钥才能执行此操作.保护主密钥.一个有用的类比是公钥加密:您需要共享您的公钥但保护私钥.

有人可以修改你的数据吗?是的,但只有你让他们.用户可以查询属于其他用户的数据吗?是的,但只有你放他们的时候才会这样.Parse有几种方法可以确保数据的完整性和安全性.

第一个是每个对象的权限.使用Parse.com Web界面设置a)是否可以动态创建类,以及b)现有类的CRUD权限.保护应用程序的一个更简单的步骤是禁用未明确要求的任何类权限.例如,在后端创建的对象不需要最终用户可写(或可读).

第二个是访问控制列表(ACL).在每条记录上设置ACL.它们指定哪些用户或角色可以读取或写入记录.没有ACL的记录是公开的(任何用户都可以找到它).如果Sue创建了一个私有的记录,请设置ACL.没有主密钥,Tom将无法找到它.

第三个是Cloud Code.您可以使用beforeSave/afterSave函数强制执行关键任务业务规则和数据验证.确定真正重要的内容,并确保在这些功能中对其进行验证.在这些函数中明确设置ACL也是一个好主意.在创建对象时可以传入ACL,但最终用户可能会篡改这些ACL.

以下是安全性和完整性的概要.

  • 对象权限应仅在必要时打开以支持您的要求.

  • 每个记录都应该有一个ACL,除非你确定它不应该.

  • 大多数ACL应使用before/afterSave函数设置.

  • 必须执行的任何验证都应在before/afterSave函数中检查.

最后一点:将所有业务逻辑视为"重要"并坚持"完美的完整性"是很有诱惑力的.这对许多应用来说都是过度杀伤力.确保您有足够的服务器端保护,以便一个用户永远不会对您或您的其他用户造成伤害.除了支持费用之外,没有多大意义担心.如果有人正在试验您的应用但是无法有意或无意地干扰他人,也许他们会找到一种全新的方式来使用它:).


小智 2

Parse 提供了多个可通过不同 API 使用的访问密钥:

  • 客户端密钥(用于 iOS 和 Android 应用程序)
  • JavaScript 密钥
  • Windows 键
  • 休息键
  • 主密钥(用于REST API访问,但不符合对象ACL权限)

从客户端 javascript 访问 Parse 时,您应该使用带有 Javascript 访问密钥的 javascript API。

就安全性而言,您将无法阻止用户使用客户端 JavaScript 使用的访问密钥。Parse 通过附加到每个对象的 ACL 提供强大的访问控制,允许您将对每个类的读/写访问限制为指定用户。您还可以阻止客户端在应用程序的设置中创建新课程。请查看此处的安全指南。