Comments (7)
首先,如果这是网页中的代码,那么浏览器中的网页代码都是运行在沙盒环境中的,它不可能也没有能力访问你的浏览器插件的加密钱包。
其次,我确认了我们的代码库,以及编译部署后的代码文件,没有包含任何加密货币相关的代码,更不要说你截图中的部分。
xmind-embed-viewer 是一个嵌入网页的,用于渲染查看用户自有 xmind 文件的库,它只负责调用 xmind share 加载和渲染显示用户传递的 xmind 文件,仅此而已。
最后,xmind-embed-viewer 没有发布任何的浏览器插件、应用等,我们只提供了 npm registry 中的 xmind-embed-viewer 代码包。
再次强调一遍,我们没有为 xmind-embed-viewer 发布任何的浏览器插件、应用等,不要相信 npm registry 仓库中的 xmind-embed-viewer 以外的任何分发或者二次开发。
from xmind-embed-viewer.
再次强调一遍,我们没有为 xmind-embed-viewer 发布任何的浏览器插件、应用等,不要相信 npm registry 仓库中的 xmind-embed-viewer 以外的任何分发或者二次开发。
稍微调查了一下,我们只提供 xmind-embed-viewer 的 npm 发行包并且确认了没有问题。
如果你确认这个第三方利用 xmind-embed-viewer 做的应用包含了恶意代码,可以提供一下具体的来源吗?
我在 vscode 的插件商店并没有看到类似的。
from xmind-embed-viewer.
这个插件是我自己写的,obsidian的插件: 逻辑只是通过npm引入了xmind-embed-view,然后new了XMindEmbedViewer出来,
最后渲染出来的document就有这个了。。。
可以看看比较完整的截图:
渲染出来的iframe,里面是一个,这里应该都是xmind-embed-view渲染出来的,里面自带一个脚本,就是加密货币埋点的。
from xmind-embed-viewer.
简单写了一个html,浏览器打开渲染也是一样的,有这种逻辑在。这是我的代码,你们自己试也应该是一样,能复现的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XMind Embed Viewer (Development)</title>
</head>
<body>
<div style="max-width: 1280px">
<p>话不多说,这就是一个嵌入测试
</p>
<div id="centerMind">
</div>
</div>
</body>
<script src="https://unpkg.com/xmind-embed-viewer/dist/umd/xmind-embed-viewer.js"></script>
<!-- or https://www.jsdelivr.com/npm/xmind-embed-viewer/dist/umd/xmind-embed-viewer.js -->
<script> // window.XMindEmbedViewer are available now. </script>
<script>
const viewer = new XMindEmbedViewer({
el: '#centerMind', // HTMLElement | HTMLIFrameElement | string
// 如果在**大陆境内速度慢,可以添加的参数 `region: 'cn'` 改为使用 xmind.cn 的图库作为依赖。
// region: 'cn' //optinal, global(default) or cn
})
fetch('/resource/static/test-1.xmind')
.then(res => res.arrayBuffer())
.then(file => viewer.load(file))
.catch(error => console.error('Error fetching xmind file:', error));
</script>
</html>
from xmind-embed-viewer.
刚刚看了下确有这个收集加密钱包拓展使用情况的埋点代码,问了下负责的同事说这是想收集用户使用加密钱包类型的情况,后续购买订阅支付会支持使用加密钱包支付,整个过程是合法的不涉及用户隐私相关。
被怀疑的完整代码解析如下:
plausible
plausible 是一个数据埋点服务,我们主要用它来收集网页客户端提交的脱敏用户数据。getTrustWalletFromWindow
函数是 从 window 对象中取得浏览器加密钱包拓展,整个过程是合法的,根据 eip-1193 规范设计的接口。
最后是 plausible 提交浏览器拓展当前支持信息报告服务器:
plausible('CurrentProvider', {
props: {
'current_provider_name': currentProvider
}
})
完整代码:
window.addEventListener('load', function() {
// 查找 plausible 关联的按钮 DOM 对象(其实他们可以用代理的写法的不需要这样每个对象绑一个事件)
const els = Array.from(document.querySelectorAll('[data-plausible-click-name]'))
els.forEach(el => {
el.addEventListener('click', function() {
const { plausibleClickName } = el.dataset
if (!plausibleClickName) return
plausible('click', {
props: {
'plausible_click_name': plausibleClickName
}
})
})
})
// 这里的注释非常的令人误解,实际上不是什么窃取逻辑
// ===== 加密货币埋点 =====
// https://developer.trustwallet.com/developer/develop-for-trust/browser-extension/evm#accessing-the-injected-provider
function getTrustWalletFromWindow() {
const isTrustWallet = (ethereum) => {
// Identify if Trust Wallet injected provider is present.
const trustWallet = !!ethereum.isTrust;
return trustWallet;
};
const injectedProviderExist =
typeof window !== "undefined" && typeof window.ethereum !== "undefined";
if (!injectedProviderExist) {
return null;
}
if (isTrustWallet(window.ethereum)) {
return window.ethereum;
}
if (window.ethereum?.providers) {
return window.ethereum.providers.find(isTrustWallet) ?? null;
}
return window["trustwallet"] ?? null;
}
function getCurrentProvider() {
try {
if (getTrustWalletFromWindow()) return 'trust'
// https://docs.metamask.io/wallet/reference/provider-api/#windowethereumismetamask
if (window.ethereum && window.ethereum.isMetaMask) return 'metamask'
// https://docs.cloud.coinbase.com/wallet-sdk/docs/solana-provider
if ('coinbaseSolana' in window) return 'coinbase'
if (!window.web3) return null
if (!window.web3.currentProvider) return null
if (window.web3.currentProvider.isMetaMask) return 'metamask'
if (window.web3.currentProvider.isTrust) return 'trust'
if (window.web3.currentProvider.isGoWallet) return 'goWallet'
if (window.web3.currentProvider.isAlphaWallet) return 'alphaWallet'
if (window.web3.currentProvider.isStatus) return 'status'
if (window.web3.currentProvider.isToshi) return 'coinbase'
if (!window.web3.currentProvider.constructor) return null
if (window.web3.currentProvider.constructor.name === 'EthereumProvider') return 'ethereum'
if (window.web3.currentProvider.constructor.name === 'Web3FrameProvider') return 'parity'
return null
} catch (err) {
return null
}
}
const currentProvider = getCurrentProvider()
if (!currentProvider) return
plausible('CurrentProvider', {
props: {
'current_provider_name': currentProvider
}
})
})
所以请放心使用,这只是一场误会而已。
from xmind-embed-viewer.
前几天看的时候也没有留意到这个部分,我只检查了主要外部 npm 依赖包来源校对和本项目的完整代码,所以没有找到这个地方来,这点的确是我的失误
from xmind-embed-viewer.
这样,那我判断也可能武断了,不好意思~
from xmind-embed-viewer.
Related Issues (16)
- Would you mind making the online content of iframes available offline? HOT 1
- 这个库还会更新和维护吗? HOT 12
- xmind-embed-viewer如何实现添加更多的下拉选项 HOT 5
- ReferenceError: Vue is not defined HOT 2
- 访问速度慢 HOT 1
- 控制台怎么这么多打印,鼠标移到视图能不能拖动视图? HOT 4
- 由于访问慢,可以加一个代理吗 HOT 7
- 文件打开后渲染不对
- Can it be used offline? HOT 5
- 渲染异常
- Links in the nodes?
- 不支持内网环境 HOT 1
- 如何导出思维导图图片 HOT 1
- [Discussion] This repo is only a viewer client. Does anyone know of any deep libraries that are open source?
- event listener 目前没有任何作用
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xmind-embed-viewer.