javascript - CloudKit.js 的安全性

标签 javascript security cloudkit cloudkit-web-services

所以我通读了 Apple 给我们的示例(CloudKit 目录),我注意到每次您想要编写或读取时都需要将您的 API token 放入脚本中。

现在 Javascript 是基于客户端的,这意味着每个用户都可以读取 API token 并可以读取和写入我的容器?!

此代码将在其中一个 Javascript 文件中

CloudKit.configure({
locale: 'en-us',

containers: [{

// Change this to a container identifier you own.
containerIdentifier: 'com.example.apple-samplecode.cloudkit-catalog',

apiTokenAuth: {
  // And generate a web token through CloudKit Dashboard.
  apiToken: '<insert your token here>',

  persist: true, // Sets a cookie.

  signInButton: {
    id: 'apple-sign-in-button',
    theme: 'black' // Other options: 'white', 'white-with-outline'.
  },

  signOutButton: {
    id: 'apple-sign-out-button',
    theme: 'black'
  }
},

environment: 'development'
}]
});

现在的问题是:我是不是遗漏了什么,或者是用户通过 Node 进行服务器到服务器通信的解决方案?

最佳答案

这是我的理解:

API token 并不是真的要私有(private),而且也不可能是因为它们设计用于客户端 JavaScript。即使您试图混淆代码中的 token ,也可以通过检查登录过程中调用的 URL 轻松发现它。

要了解的重要一点是,他们不能自己做很多事情。它们允许用户登录到您的容器,然后登录的用户可以读取和写入他们自己的数据——如果他们在 iPhone 或 Mac 上登录 iCloud 并在那里使用您的应用程序,他们可以访问的内容相同.

没有太大的安全问题,因为即使他们拿了你的 token 并编写了他们自己的 JavaScript,他们也只是在弄乱他们自己的数据。也就是说,您可以使用“允许的来源”选项来使这更难做到。 (我这样说是因为他们可以想象使用浏览器扩展或其他东西来改变您网站上的 JS。一般来说,将用户的 CloudKit 数据视为不受信任的数据似乎是明智的,即使它来自 API。)

Server to Server Keys 非常不同,并且有一个私钥当然是私有(private)的。在那种情况下,任何拥有私钥的人都可以读取和写入您的公共(public)数据库。顾名思义,这不是您可以直接从 JavaScript 使用的东西——您需要编写自己的服务器端代码来直接联系 CloudKit API。

不幸的是,虽然 Apple 在您创建私有(private)服务器到服务器 key 时有一个很好的红色警告,但他们似乎没有提供任何关于 API token 的安全指南。我有 99% 的信心认为这是因为这不是问题,并且正在努力获得最后 1% 的确认。

关于javascript - CloudKit.js 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333352/

相关文章:

判断一个值是否为整数的Javascript函数

javascript - 是否可以修改服务 worker 缓存响应 header ?

vba - 在 VBA 项目中安全地存储密码

java - 如何向现有 Java Swing 程序添加登录屏幕?

ios - 是否可以不基于应用程序名称设置默认CloudKit容器?

ios - 如何将资源保存到 CloudKit sharedCloudDatabase?

javascript - 如何解决混合内容问题

javascript - 将焦点放在不同元素后面的元素上

c# - 使业务层的方法安全。最佳实践/最佳模式

swift - 在 iCloud 数据库中上传 Assets 之前发送的记录更新推送通知