我正在开发一个使用虚拟货币的应用程序。我发现了一个问题,假设说,由于api密钥是纯文本的,如果有人决定使用我的密钥创建应用程序,他们可以使用如下所示的简单查询。
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("username","Username");
query.findInBackground(new FindCallBack<ParseUser>(){
@Override
public void done(List < ParseUser > parseList, ParseException e) {
for(ParseUser user: parseList){
user.set("coins",10000);
user.saveInBackground();
}
}
});此查询允许用户在未登录的情况下更改其货币。如何使用Parse提高虚拟货币应用程序的安全性?"coins“是用户行中的一列,显示他们拥有的货币数量。我有一个基于关系的朋友列表。
发布于 2015-01-08 18:31:44
我推荐阅读Security和Implementing Business Logic in Cloud Code
客户端和服务器之间的
连接
当应用程序第一次连接到解析时,它使用一个应用程序ID和一个客户端密钥(或REST密钥,或.NET密钥,或JavaScript密钥,取决于您使用的平台)来标识自己。这些都不是秘密,它们本身并不能保证应用程序的安全。这些密钥作为您的应用程序的一部分提供,任何人都可以从他们的设备反编译您的应用程序或代理网络流量,以找到您的客户端密钥。有了JavaScript,这种攻击就更容易了--用户只需在浏览器中“查看源代码”,就可以立即找到您的客户端密钥。
这就是为什么Parse有许多其他安全特性来帮助您保护您的数据。客户端密钥将分发给您的用户,因此普通公众甚至恶意黑客都可以使用客户端密钥执行任何操作。
另一方面,主密钥绝对是一种安全机制。使用主密钥允许您绕过应用程序的所有安全机制,例如类级权限和ACL。拥有主密钥就像拥有对应用服务器的根访问权限一样,您应该像保护生产机器的根密码一样热心地保护您的主密钥。
总体理念是限制客户端的能力(使用客户端密钥),并在Cloud Code中执行任何需要主密钥的敏感操作。在题为在云代码中实现业务逻辑的小节中,您将了解如何最好地利用这一能力。
主要思想是下一步:coins data would be only readable from client side。
https://stackoverflow.com/questions/27825014
复制相似问题