我一直在学习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);}
);
虽然这对于学习非常有用,但我想知道用于Parse的RESTful API或任何其他Backend-as-Service供应商如何在真正的html应用程序中工作。 API密钥和应用程序ID将以JavaScript形式公开,任何足够智能查看源代码的人都可以修改您帐户的数据。
我可以将此图像工作的唯一方法是使用代理服务器添加到Api Key / App Id标头。但是,这会破坏不必运行自己的后端服务器的目的。我在这里错过了什么吗?
答案 0 :(得分:20)
这是你缺少的东西:)
Parse.com REST / JavaScript密钥被设计为“非常疯狂”。使用这些密钥,无法绕过对象访问规则或之前保存验证。只有主密钥才能执行此操作。保护主密钥。一个有用的类比是公钥加密:您需要共享公钥但保护私钥。
任何人都可以修改您的数据吗?是的,但只有你让他们。用户可以查询属于其他用户的数据吗?是的,但只有当你让他们时才会这样。 Parse有几种方法可以确保数据的完整性和安全性。
第一个是每个对象的权限。使用Parse.com Web界面设置a)是否可以动态创建类,以及b)现有类的CRUD权限。保护应用程序的一个更简单的步骤是禁用未明确要求的任何类权限。例如,在后端创建的对象不需要最终用户可写(或可读)。
第二个是访问控制列表(ACL)。在每条记录上设置ACL。它们指定哪些用户或角色可以读取或写入记录。没有ACL的记录是公开的(任何用户都可以找到它)。如果Sue创建了一个私有的记录,请设置ACL。如果没有万能钥匙,汤姆将无法找到它。
第三个是Cloud Code。您可以使用beforeSave / afterSave函数强制执行关键任务业务规则和数据验证。确定真正重要的内容,并确保在这些功能中对其进行验证。在这些函数中明确设置ACL也是一个好主意。创建对象时可以传入ACL,但最终用户可能会篡改这些。
以下是安全性和完整性的概要规则。
对象权限应仅在支持您的要求时打开。
每个记录都应该有一个ACL,除非你确定它不应该。
大多数ACL应使用before / afterSave函数设置。
任何必须强制执行的验证都应在before / afterSave函数中检查。
最后一件事:将所有业务逻辑视为“重要”并坚持“完美诚信”是很有诱惑力的。这对许多应用来说都是过度杀伤力。确保您有足够的服务器端保护,以便一个用户永远不会对您或您的其他用户造成伤害。除了支持费用之外,没有多大意义担心。如果某人正在尝试您的应用但是无法有意或无意地干扰他人,那么他们可能会找到一种全新的方式来使用它:)。
答案 1 :(得分:2)
Parse提供了几个可以通过不同API使用的访问密钥:
从客户端javascript访问Parse时,您应该使用带有Javascript访问密钥的javascript API。
在安全性方面,您将无法阻止用户使用客户端javascript使用的访问密钥。 Parse通过附加到每个对象的ACL提供强大的访问控制,允许您限制每个类对指定用户的读/写访问。您还可以阻止客户在应用程序的设置中创建新类。请查看安全指南here。