如何区分JS不透明对象?

时间:2015-11-28 13:05:41

标签: javascript indexeddb scala.js webcryptoapi

WebCrypto API引入了不可导出的私钥的概念,可以将其导出到IndexDB,但不能导出到LocalStorage或Web上。这在Charles Engleke的博客“Saving Cryptographic Keys in the Browser”中得到了很好的解释。

但这些物体如何实际起作用?有没有办法从JS告诉对象是否不透明?我无法找到有关此信息的任何信息。

1 个答案:

答案 0 :(得分:1)

没有神奇的"不透明的旗帜"任何地方。 "不透明"这只是意味着对象中保存的数据从不对脚本可见。您仍然可以使用CryptoKey实例执行某些操作 - 例如在这种情况下,将其存储在索引数据库中或通过postMessage()发送到另一个上下文。

这与例如一个Blob对象,其中所有所持有的数据可以直接通过对象上的属性进行检查,也可以通过FileReader间接进行检查。

另一个不透明的例子是Response对象作为跨源Fetch操作的结果,可以由Service Worker处理但身体无法处理被检查。

所以"有没有办法从JS告诉对象是否不透明?" - 这取决于。如果对象是CryptoKey的实例,那么您知道存在隐藏数据,因此它是不透明的。如果一个对象是Blob的实例,那么你知道有一种方法可以访问数据,即使你需要其他API来访问它,所以它不是不透明的。如果对象是Response的实例,则它可能是不透明的,具体取决于源。