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

How to protect Rest API key for Parse in html application

本文关键字:Rest API 密钥 保护 html 应用程序      更新时间:2023-09-26

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

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);}
);

虽然这对学习很有帮助,但我想知道Parse的RESTful API或任何其他后端即服务供应商如何在真正的html应用程序中工作。API密钥和应用程序Id将在JavaScript中公开,任何聪明到可以查看源代码的人都可以将数据修改到您的帐户。

我可以将其映像为工作的唯一方法是使用一个添加到Api-Key/App-Id标头的代理服务器。然而,这将违背不必运行自己的后端服务器的目的。我是不是遗漏了什么?

以下是您缺少的内容:)

Parse.comREST/JavaScript密钥被设计为"在野外"。有了这些密钥,就不可能绕过对象访问规则或beforeSave验证。只有万能钥匙才能做到这一点。保护万能钥匙。一个有用的类比是公钥加密:您需要共享公钥,但要保护私钥。

有人可以修改你的数据吗?是的,,但前提是您允许他们。用户是否可以查询属于其他用户的数据?是的,,但前提是你允许他们。Parse有几种方法可以确保数据的完整性和安全性。

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

第二个是访问控制列表(ACL)。每个记录都设置了ACL。它们指定哪些用户或角色可以读取或写入记录。没有ACL的记录是公共的(任何用户都可以找到它)。如果Sue创建了一个对她来说应该是私有的记录,那么就设置一个ACL。如果没有万能钥匙,汤姆将找不到它。

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

以下是安全性和完整性的经验总结。

  • 对象权限应仅在支持您的需求所需时才可打开。

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

  • 大多数ACL都应该设置before/afterSave函数。

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

最后一件事:认为所有的商业逻辑都是"重要的",并坚持"完美的完整性"是很有诱惑力的。这对许多应用程序来说是过分的。确保你有足够的服务器端保护,这样一个用户就不会对你或其他用户造成伤害。除此之外(除了支持成本),担心太多也没有什么意义。如果有人正在试用你的应用程序,但被阻止有意或无意地干扰他人,也许他们会找到一种全新的使用方式:)。

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

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

从客户端javascript访问Parse时,应使用带有javascript访问键的javascript API。

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