如何在html应用程序中保护解析的Rest API密钥
How to protect Rest API key for Parse in html application
我一直在学习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提供了强大的访问控制,允许您将对每个类的读/写访问限制为指定用户。您还可以阻止客户端在应用程序的设置中创建新类。看看这里的安全指南。
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 在同一ip但不同端口上使用Rest API
- 从ANGULAL连接到REST API
- 如何在使用loopback REST API时更改gulp-angular项目的端口号
- Cross domain - REST API
- 更改REST API服务器的最佳实践
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- REST API node.js
- 数据未显示 - 余烬 js - Rest API
- 登录后无法使用 ACS REST API 发送推送通知
- 在 Rest API 中发布调用
- REST API 服务器是否应该使用 PUT 接收 JSON 数据或普通表单数据
- 如何使用已经存在的 REST API 后端在 Angular 应用程序中实现登录系统
- 获取文件并从rest api下载
- 使用Angular Resource查询具有字符串参数的REST API
- Visual Studio Team Services Rest API未授权的客户端错误
- 无法通过rest api读取json变量
- Wordpress REST API身份验证,无需登录页面
- 通过REST API/GET请求订阅Mailchimp列表