假设我的DApp得到了以下(smart)合同:
module.exports = {
winner: async function(value) {
if (value===10) {
}
}
}现在,Dapp用户可以执行一些调用契约的操作,value可以是10,也可以不是。Dapp确定value是否等于10。到目前一切尚好。
但是现在看来,任何拥有有效秘密的人(以及一些XAS发送到Dapp的侧链)都可以通过简单的PUT请求调用契约,并将value设置为他们想要的任何东西。
如何确保value的值由Dapp设置,并且不能被操作?
发布于 2018-07-31 10:47:16
据我所知,Asch DApps运行在快递服务器上,启用了cors中间件,这意味着任何人都可以从任何地方执行请求(GET、POST、PUT等)。
因此,您可以使用如下所示的脚本轻松调用您的合同:
const axios = require('axios');
var fee = '10000000'
var data = {
secret: "<your secret>",
fee: fee,
type: 1001, //the number for contractfile.function
args: 1000 // a very high score
}
axios.put('http://<domain>:4096/api/dapps/<dappid>/transactions/unsigned',data)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.then(function () {
// always executed
});由于上述原因,无法保证输入中不被操作(从DApp外部发送)。另见:https://github.com/AschPlatform/asch/issues/228
https://stackoverflow.com/questions/51603087
复制相似问题