Как отличить непрозрачные объекты JS?

API WebCrypto вводит понятие неэкспортируемых закрытых ключей, которые можно экспортировать в IndexDB, но не в LocalStorage или через Интернет. Это хорошо объясняется в блоге Чарльза Энглика " Сохранение криптографических ключей в браузере".

Но как эти объекты на самом деле работают? Есть ли способ узнать из JS, если объект непрозрачный или нет? У меня проблемы с поиском какой-либо информации по этому вопросу.

1 ответ

Решение

Там нет волшебного "непрозрачного флага" нигде. "Непрозрачный" здесь просто означает, что в объекте содержатся данные, которые никогда не будут видны сценарию. Вы все еще можете выполнять некоторые операции с CryptoKey экземпляр - например, в этом случае, сохранить его в индексированной БД или отправить в другой контекст через postMessage(),

Это в отличие от, например, Blob объект, в котором все хранимые данные могут быть проверены либо напрямую через атрибуты объекта, либо косвенно через FileReader,

Другим непрозрачным примером будет Response объект в результате операции извлечения перекрестного происхождения, которая может быть обработана сервисным работником, но тело не может быть проверено.

Итак, "есть ли способ узнать из JS, если объект непрозрачный?" - это зависит. Если объект является экземпляром CryptoKey тогда вы знаете, что есть скрытые данные, поэтому они непрозрачны. Если объект является экземпляром Blob тогда вы знаете, что есть способ доступа к данным, даже если вам нужны другие API для доступа к ним, поэтому они не непрозрачны. Если объект является экземпляром Response это может быть непрозрачным, в зависимости от источника.

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