我的理解是,Ethereum应用程序的典型体系结构是让智能契约充当一个集中的、无状态的前端的后端,该前端运行在单个服务器上。
这难道不是一个相当明显的安全风险吗?如果前端应用程序被劫持,所有用户的操作都可能被误导到攻击者想要的任何东西(即,不是将以太发送到有用的智能契约,而是发送到攻击者的钱包中)。
有没有办法以分散的方式托管前端应用程序?
发布于 2018-02-27 22:03:48
这确实带来了明显的安全风险。理论上,用户在发送之前会在MetaMask等文件中预览他们的事务,所以他们不需要信任dapp,但是在实践中,您预览的数据是一个神秘的契约地址和一个难以理解的十六进制数据块,而该数据的上下文--比如哪个kitty有哪个ID --来自dapp,所以一个流氓前端可以很容易地欺骗用户将不同的事务发送给他们想要的事务。
这个问题可能可以通过服务内容来解决--通过浏览器扩展提供的IPFS或Swarm的地址数据,并使用执行部署过程的命名契约(例如在部署前将代码放在一起以供审查)来控制可以显示给用户的特定应用程序名称的代码。然而,这些系统很难设计,dapp开发人员还没有一个可以轻松部署的实用解决方案。
发布于 2018-02-27 22:00:56
通常,Ethereum的前端的目的是提供一种“漂亮”的方法来调用上传的智能协议上的函数。当然,黑客可以更改用户与之交互的智能契约的地址(但用户总是能够看到他们的事务正在进行的)。您可以使用IPFS https://ipfs.io托管一个分散的前端。
使用分散后端和使用像EtherScan这样的工具的伟大之处在于,我们总是能够以相对简单的方式看到我们的以太走向何方。
如果前端确实被劫持,而黑客确实更改了合同地址,用户将能够看到他们的交易并没有达到应有的地址(想想你知道你的朋友的街道地址,有人偷了你的电话和信息,你为了抢劫你而来到一个不同的地址,你会对去那个地址保持警惕,因为你以前从未去过那里,也没有给出原因)。您还可以查看合同所包含的事务数量(只有在最近发生了很大变化的情况下才有用)。我认为这是一个有点小的问题,可以通过使用IPFS来解决(但是,它可能很慢)。
为了概述黑客必须做什么才能从用户那里恶意获取以太,他们也会;
发布于 2018-02-28 00:49:49
是的,这是正确的,这就是为什么你可以在IPFS+IPNS上托管你的数字应用程序(在像webpack这样的建筑之后)。
同样的逻辑也适用于先知,他们是集中的失败点。
https://ethereum.stackexchange.com/questions/41130
复制相似问题