假设我的DApp获得了以下(智能)合同:
module.exports = {
winner: async function(value) {
if (value===10) {
}
}
}
现在,Dapp用户可以使用某些value
来调用合同,而10
可以是value
,也可以不是。 Dapp确定10
是否等于PUT
。到目前为止一切顺利。
但是现在看来,具有有效机密(并且有些XAS发送到Dapps的侧链)的任何人都可以通过向api/<dappId>//transactions/unsigned
设置value
的简单value
请求来调用合同无论他们想要什么。
如何确保enum
的值由Dapp设置并且不能被操纵?
答案 0 :(得分:1)
据我所知,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