SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Node VM and ChildProcess
Executando códigos não confiáveis no seu servidor
Evandro EisingerEngenheiro de Software - globo.com
Jonathan PratesEngenheiro de Software - globo.com
Motivação :)
LIGUE QUATRO
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 tchau
while (true) {
console.log(process.pid);
console.log(__filename);
console.log(fs.readdirSync(__dirname));
}
return 0;
}
}
Code time #
Modulo para gerenciar contextos (execution
environment) da engine (v8).
Node VM
Node VM server para compilar e executar código
em contextos isolados.
require('vm')
Compila, executa e retorna o resultado. Não tem
acesso ao escopo local, mas tem aos objetos
globais.
vm.runInThisContext(code, options)
Code time #
Gera um novo ambiente de execução na engine
(v8) a partir de um objeto.
vm.createContext(context)
Code time #
Compila, executa o código no contexto passado e
retorna o resultado.
vm.runInContext(code, context,
options)
Code time #
Compila, não executa e nem vincula a um
contexto.
vm.Script(code, options)
Code time #
Solução o/
Code time #
"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."
spawn, parent and pid #
stdin, stdout and stderr #
Executa um comando e armazena o retorno em
um buffer.
child_process.exec(cmd, opts, cb)
Code time #
Executa um comando e envia ao processo pai o
retorno através de streams.
child_process.spawn(cmd, args, opts)
Code time #
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."
Code time #
Solução o/
runnner.js
Processo (pai)
Contexto
(v8)
X
match.js
Processo (filho)
P1 Contexto
(v8)
P2 Contexto
(v8)
Contexto (v8)
cpu's
Cria partida
Retorna resultado
LIGUE QUATRO
lig4.globo.com
talentos.globo.com
Obrigado !
Dúvidas ?

Mais conteúdo relacionado

Mais procurados

1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBCZabbix BR
 
Javascript
JavascriptJavascript
Javascriptwlsilva
 
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix
 
PhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaPhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaHenrique Gogó
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloudPET Computação
 
Load shedding, backpressure, cdc, hypervisor, docker
Load shedding, backpressure, cdc, hypervisor, dockerLoad shedding, backpressure, cdc, hypervisor, docker
Load shedding, backpressure, cdc, hypervisor, dockerGabriel Passos
 
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...Zabbix BR
 
Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread poolFabrício Rissetto
 

Mais procurados (18)

DevOps Braga #5
DevOps Braga #5DevOps Braga #5
DevOps Braga #5
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
 
Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
Javascript
JavascriptJavascript
Javascript
 
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
PhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaPhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha Camarada
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloud
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Introdução a worker
Introdução a workerIntrodução a worker
Introdução a worker
 
Let's log!
Let's log!Let's log!
Let's log!
 
Load shedding, backpressure, cdc, hypervisor, docker
Load shedding, backpressure, cdc, hypervisor, dockerLoad shedding, backpressure, cdc, hypervisor, docker
Load shedding, backpressure, cdc, hypervisor, docker
 
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
 
Novidades do PostgreSQL 10
Novidades do  PostgreSQL 10Novidades do  PostgreSQL 10
Novidades do PostgreSQL 10
 
Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread pool
 

Semelhante a Executando códigos não confiáveis com Node VM e ChildProcess

Node.js para desenvolvedores .NET
Node.js para desenvolvedores .NETNode.js para desenvolvedores .NET
Node.js para desenvolvedores .NETMVP Microsoft
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasKirmayr tomaz
 
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...Alessandro Binhara
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e MonitorizaçãoSAPO Sessions
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaJoselito Nascimento
 
Programação para Web II: NodeJS
Programação para Web II:  NodeJSProgramação para Web II:  NodeJS
Programação para Web II: NodeJSAlex Camargo
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumOriginalMy.com
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 

Semelhante a Executando códigos não confiáveis com Node VM e ChildProcess (20)

Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Node.js para desenvolvedores .NET
Node.js para desenvolvedores .NETNode.js para desenvolvedores .NET
Node.js para desenvolvedores .NET
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...
Agile tour2013: Ferramentas .NET para suporte as práticas ágeis em ambiente M...
 
Boteco Xen
Boteco XenBoteco Xen
Boteco Xen
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e Monitorização
 
Cygwin
CygwinCygwin
Cygwin
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 
Palestra parse
Palestra parsePalestra parse
Palestra parse
 
Programação para Web II: NodeJS
Programação para Web II:  NodeJSProgramação para Web II:  NodeJS
Programação para Web II: NodeJS
 
PHP e seus demônios
PHP e seus demôniosPHP e seus demônios
PHP e seus demônios
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain Ethereum
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 

Executando códigos não confiáveis com Node VM e ChildProcess