对恶意代码的竞赛平台保护



我有一个NPM "编译"图书馆。

通过node.js设置child_process,它将运行程序代码(c++,c,node.js,java,pytho)

我的问题是有些命令对我来说是危险的。例如,如果python运行以下代码:

import os 
os.system("shutdown /s /t 1")
print(sum(map(int,input().split())))

我有一个VDS服务器,所以我不能保护网站只是为类似的请求。对我来说只有一种方法Gpedit.msc,但它太多了,我不知道它的确切性能分类。

我该如何保护。这里的案例太多了。文件保护代码保护。

有没有人知道codeforces.com, acmp.ru, leetcode.com有他们如何做到这一点?

但我不能限制它。

const {VM} = require('vm2');
const {c, cpp, node, python, java} = require('compile-run');
const vm = new VM({
timeout: 1000,
allowAsync: true,
require: {
external:true
},
sandbox: {
require,
console , 
}
});

vmCode = `
const {c, cpp, node, python, java} = require('compile-run');
python.runSource(
`import os
os.system("shutdown /s /t 1")
print(1)`, 
{ stdin: '', timeout: 3000, compileTimeout:3000  }   ,async(err, data) => {
console.log(data)
});
`
try{
vm.run(vmCode)
}catch(e){
console.log("Err: ",e)
}

我建议使用Docker来避免这些问题:

  • 用户代码可能会删除文件,但这只影响虚拟环境,你可以很容易地从头开始重启容器(删除所有危险的更改)。
  • Docker允许使用docker run --cpus 1 --memory 10M这样的标志来指定限制

需要绑定源目录、输入文件和输出文件作为挂载点(一起或单独)-v /path/to/host/dir:/container/dir.

另外,您可以使用--network none指定没有网络连接。

最新更新