如何保证智能合约的输入不被篡改?
How To guarantee that the input of the smart contract is not manipulated?
假设我的 DApp 获得了以下(智能)合约:
module.exports = {
winner: async function(value) {
if (value===10) {
}
}
}
现在 Dapp 用户可以做一些事情来调用一些 value
的合约,可以是 10
也可以不是。 Dapp 确定 value
是否等于 10
。到目前为止一切顺利。
但现在看来,任何拥有有效秘密(以及一些 XAS 发送到 Dapps 的侧链)的人都可以通过 value
向 api/<dappId>//transactions/unsigned
发出简单的 PUT
请求来调用合约] 设置为他们想要的任何值。
如何保证value
的值是Dapp设置的,不可篡改?
据我所知,Asch DApps 运行 在 express 服务器上启用了 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
假设我的 DApp 获得了以下(智能)合约:
module.exports = {
winner: async function(value) {
if (value===10) {
}
}
}
现在 Dapp 用户可以做一些事情来调用一些 value
的合约,可以是 10
也可以不是。 Dapp 确定 value
是否等于 10
。到目前为止一切顺利。
但现在看来,任何拥有有效秘密(以及一些 XAS 发送到 Dapps 的侧链)的人都可以通过 value
向 api/<dappId>//transactions/unsigned
发出简单的 PUT
请求来调用合约] 设置为他们想要的任何值。
如何保证value
的值是Dapp设置的,不可篡改?
据我所知,Asch DApps 运行 在 express 服务器上启用了 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