我目前正在为WebAuthN (FIDO U2F,FIDO2)集成编写一个概念web应用程序的证明。
返回的字段cred.rawId的数据类型是ArrayBuffer。在Chromes的developer控制台中,此字段如下所示:

当我试图复制这个ArrayBuffer时,我的结果是:

注意“其他表示”(如[[Int8Array]]),它们都是零输出的!此外,我的ArrayBuffer看起来像一个普通的数组,而数据在第一个原始屏幕截图中没有显示(以这种方式)。
这是从存储的PoC修复中检索rawId的源代码(记住: Base64状态):
function StringToByteArray(str) {
var bytes = new ArrayBuffer();
for (var i = 0; i < str.length; ++i) {
var code = str.charCodeAt(i);
var _bytes = new ArrayBuffer(bytes.byteLength + 1);
for ( var j = 0; j < bytes.byteLength; j++ ) {
_bytes[j] = bytes[j];
}
_bytes[bytes.byteLength] = code;
bytes = _bytes
}
return bytes;
}
var x_rawId = StringToByteArray(base64.decode(cred.id.replace(/-/g, '+').replace(/_/g, '/').padRight(cred.id.length + (4 - cred.id.length % 4) % 4, '=')));Base64类来自尼克·加尔布雷斯用于JavaScript实现的JavaScript。
当前的rawId可能会工作,但是我想100%地复制它,这样在将来的浏览器版本中,它在其他浏览器中失败的可能性就会降到最低。
如何实现Chrome屏幕截图中显示的表示?
发布于 2019-05-29 11:42:37
您是否可以尝试用以下方法替换该函数:
function StringToByteArray(str) {
return Uint8Array.from(str, c => c.charCodeAt(0));
}这很简单,但它在我的一个项目中起了作用。
https://stackoverflow.com/questions/52783656
复制相似问题