Безопасность CloudKit.js

Поэтому я прочитал пример, который Apple дала нам (каталог CloudKit), и заметил, что каждый раз, когда вы хотите написать или прочитать, вам нужно вставить свой токен API в скрипт.

Теперь Javascript основан на клиенте, что означает, что каждый пользователь может читать токен API и может читать и записывать в мои контейнеры?!

Этот код будет в одном из файлов 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?

2 ответа

Вот мое понимание:

Токены API на самом деле не предназначены для частного использования, и не могут быть такими, поскольку они предназначены для использования в клиентском JavaScript. Даже если вы попытаетесь скрыть токен в своем коде, его легко обнаружить, изучив URL-адреса, которые вызываются во время входа в систему.

Важно понимать, что они не могут многое сделать сами. Они позволяют пользователю входить в ваш контейнер, а затем вошедший в систему пользователь может читать и записывать свои собственные данные - те же самые вещи, к которым у него будет доступ, если они войдут в iCloud на своем iPhone или Mac и будут использовать там ваше приложение.,

С точки зрения безопасности проблем не возникает, потому что даже если они берут ваш токен и пишут свой собственный JavaScript, они только портят свои собственные данные. Тем не менее, вы можете использовать опцию "Allowed Origins", чтобы сделать это сложнее. (Я говорю об этом так, потому что они могли использовать расширение браузера или что-то еще, чтобы изменить JS на вашем сайте. В целом, представляется разумным рассматривать данные CloudKit пользователя как ненадежные, даже если они поступают из API.)

Ключи от сервера к серверу очень разные и имеют закрытый ключ, который, конечно, должен быть закрытым. В этом случае любой, у кого есть закрытый ключ, имеет доступ на чтение и запись к вашей публичной базе данных. Как видно из названия, это не то, что вы бы использовали непосредственно из JavaScript - вы бы написали свой собственный код на стороне сервера, который напрямую связывался с API CloudKit.

К сожалению, хотя у Apple появляется приятное красное предупреждение, когда вы создаете частный ключ от сервера к серверу, они, похоже, не предлагают никаких рекомендаций по безопасности для токенов API. Я на 99% уверен, что это потому, что это не проблема, и работаю над получением подтверждения для этого последнего 1%.

Init.js запускается на стороне клиента, в браузере, вы можете легко заметить это из кода:

<script>
        window.addEventListener('cloudkitloaded',CKCatalog.init);
</script>

Это раскроет токен API пользователю...
Но вы всегда можете уменьшить риск опасного использования токена API:

  • Установите "Разрешенные источники" токена API только для домена вашего сайта;
  • Установите "Обратный звонок при входе" только на ваш URL;
  • так далее

Короче говоря, выполнение на стороне клиента раскроет ваш API-токен, хотя все еще в порядке, если вы предпримете действия, чтобы предотвратить опасное использование вашего токена.

Другие вопросы по тегам