node vm and childprocess: executando códigos não confiáveis no seu servidor
TRANSCRIPT
1. Como rodar código de uma forma segura?
2. Como otimizar o processamento das partidas?
Problemas :(
function Player () {var fs = require('fs');
this.move = function () {// hora de dar tchauwhile (true) {
console.log(process.pid);console.log(__filename);console.log(fs.readdirSync(__dirname));
}
return 0;}
}
Compila, executa e retorna o resultado. Não tem
acesso ao escopo local, mas tem aos objetos
globais.
vm.runInThisContext(code, options)
Compila, executa o código no contexto passado e
retorna o resultado.
vm.runInContext(code, context, options)
"Note that running untrusted code is a tricky
business requiring great care."
"script.runInNewContext is quite useful, but
safely running untrusted code requires a separate
process."
Carrega e executa um processo filho (no sistema
operacional) e captura as saídas do programa.
Child Process
"It is possible to stream data through a child's
stdin, stdout, and stderr in a fully non-blocking
way."
"Child processes and parent processes can
communicate neatly back and forth, and parent
processes can listen to and control their child
processes."
Executa um comando e envia ao processo pai o
retorno através de streams.
child_process.spawn(cmd, args, opts)
Executa um processo filho do nodejs. Permite a
comunicação entre pai e filho através da classe
EventEmitter.
child_process.fork(module, args, opts)
"These child Node.js processes are still whole new
instances of V8. Assume at least 30ms startup and
10mb memory for each new Node.js. That is, you
cannot create many thousands of them."
"Unlike the fork() POSIX system call,
child_process.fork() does not clone the current
process."
runnner.jsProcesso (pai)
Contexto
(v8)
X
match.jsProcesso (filho)
P1 Contexto
(v8)
P2 Contexto
(v8)
Contexto (v8)
cpu's
Cria partida
Retorna resultado