我使用Parse发送请求,从Parse服务的Core Data获取数据。但是当我使用Charles来捕获请求时,我发现它在请求头中显示了应用程序ID和客户端ID。这意味着人们可以使用这些来破坏我的数据。如何阻止人们从Parse请求中获取应用程序ID和客户端ID?
初始化解析:
[Parse enableLocalDatastore];
[Parse setApplicationId:@"71sGtWWba1AgjP8PpprdMFYOlxSHjVzScYRWuaaa"
clientKey:@"ivO7FUz3botgxpi0ewJiDHjVQmFocTOQGBlINbbb"];
获取数据:
PFQuery *query = [PFQuery queryWithClassName:@"Player"];
[query getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable obj, NSError * _Nullable error) {
NSLog(@"%@; error %@", obj, error);
}];
查尔斯的请求标题:
POST /1/classes/Player HTTP/1.1
Host: api.parse.com
X-Parse-Client-Version: i1.12.0
Accept: */*
Proxy-Connection: keep-alive
X-Parse-Application-Id: 71sGtWWba1AgjP8PpprdMFYOlxSHjVzScYRWuaaa
X-Parse-Client-Key: ivO7FUz3botgxpi0ewJiDHjVQmFocTOQGBlINbbb
X-Parse-Installation-Id: 2ad968fd-a5bd-46d5-898a-39a0168bcccc
Accept-Language: vi-vn
X-Parse-OS-Version: 9.2.1 (13D15)
Accept-Encoding: gzip, deflate
Content-Type: application/json; charset=utf-8
Content-Length: 29
User-Agent: ParsePusher/1 CFNetwork/758.2.8 Darwin/15.0.0
Connection: keep-alive
X-Parse-App-Build-Version: 1
X-Parse-App-Display-Version: 1.0
{"limit":"1","_method":"GET"}
当我使用自己的Parse服务器
时也会发生这种情况答案 0 :(得分:1)
要访问您的数据,人员(用户或开发人员)需要在“设置”选项卡中的解析管理控制台中定义的密钥之一。
当然,万能密钥具有所有访问权限,必须保留SECRET
客户端密钥部署在每个应用程序设备上,因此即使您可以自己加密此密钥,也必须将其视为公钥。
要限制对具有此密钥的人员的访问(读/写),您应同时使用CPL和ACL
可以为每个类的每个元素(如表中的每一行)自定义ACL(对象级访问控制)
CPL(类级别权限)为每个类定义一些全局访问规则(一种“表”访问)。您可以通过单击“安全”按钮“(在核心/数据选项卡中)在管理控制台中定义CPL
默认情况下,定义了公共访问权限,因此拥有客户端密钥和应用程序ID的人员可以访问您的数据。您可以定义一些限制规则,即仅对经过身份验证的用户或事件的访问权限为某些数据访问创建一种“管理员”角色。您可以为读写访问定义不同的规则
我看到的唯一弱点是,如果数据具有公共访问(读/写),则可以由具有客户端密钥的其他“开发者”读取(或甚至写入)。