Re: Dificuldades primárias

61 views
Skip to first unread message

Marcelo Wanderley

unread,
Jun 20, 2012, 7:43:03 AM6/20/12
to NodeJS Brasil

Olá Rafael,

Você tem a mesma dúvida...

Segurança.

Ainda não li nada sobre este assunto com nodeJs.

Abraços.

On 18 jun, 23:40, "Rafael O. Bueno" <rafacuritiba...@gmail.com> wrote:
> Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e
> criar um servidor locar e testar tranquilamente.
> Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho
> atualmente com php, um arquivo externo linkando o socket io é capaz de se
> conectar ao servidor?
> Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
>
> Obrigado!

Mario Augusto Mania

unread,
Jun 20, 2012, 9:06:19 AM6/20/12
to nod...@googlegroups.com
Bem, ai depende :)

Por exemplo, se a preocupação for DoS, uma simples uncaught exception derruba sua app e ela nunca mais volta sem intervenção (ex, cluster, supervisor, etc...).

Mario

André Caribé

unread,
Jun 20, 2012, 9:25:54 AM6/20/12
to nod...@googlegroups.com
É, temos poucas notícias sobre segurança, mas as falhas so irão aparecer quando o Node popularizar.

Para o desenvolvedor, por em quanto, a idéia é sempre utilizar funções anônimas e tomar os mesmos cuidados que se tem com outras linguagens de programação.
--
@andrecaribe +55 (71) 8711.5527
http://www.andrecaribe.com.br
http://lattes.cnpq.br/3541565181654143

Luciano Ramalho

unread,
Jun 20, 2012, 10:20:12 AM6/20/12
to nod...@googlegroups.com
2012/6/20 André Caribé <decoc...@gmail.com>:
> Para o desenvolvedor, por em quanto, a idéia é sempre utilizar funções
> anônimas e tomar os mesmos cuidados que se tem com outras linguagens de
> programação.

De que forma o uso de funções anônimas ajuda na segurança?

[ ]s
Luciano

--
Luciano Ramalho
NOVO TWITTER: @ramalhoorg

Autor e instrutor dos cursos:
* Academia Python na Globalcode
--> http://python.globalcode.com.br

* Python para quem sabe Python nas Oficinas Turing
--> http://turing.com.br/ppqsp

Luiz Henrique Coura

unread,
Jun 20, 2012, 10:43:42 AM6/20/12
to nod...@googlegroups.com
Rafael,

Respondendo sua pergunta: é possível sim.

Tive essa mesma dúvida qd comecei a mexer com node.

Faça um teste simples. Estou anexando o exemplo q fiz aqui pra vc executar aí na sua máquina. Nele eu executo o comando vmstat e jogo o resultado em realtime para o browser, onde acesso um arquivo index.php.

index.php - coloque esse arquivo dentro do seu apache,nginx....
vmstat.js - coloque esse arquivo dentro de um path qualquer, por exemplo: /tmp/vmstat
package.json - coloque esse arquivo dentro do mesmo path do vmstat.js: /tmp/vmstat

Entre em /tmp/vmstat e instale as dependências:

$> cd /tmp/vmstat
$> npm install

Execute o servidor:

$> node vmstat.js

Abra seu browser e acesse o arquivo index.php (http:localhost/index.php).

Isso que te passei foi apenas uma prova de conceito, coisa bastante simples, bem amadora.... 

Para ambiente de produção, sugiro:

- isolar serviços em servidores diferentes;
- utilizar proxy na frente do nodejs (apache, nginx, ...);
- utilizar CORS, pra controlar quem pode consumir seu serviço socket.io;
- particularmente, eu gosto de utilizar o forever para executar os serviços node, mas existem outras alternativas.
- utilize algum banco de dados nosql, como redis, para controlar as sessões, principalmente se vc estiver executando o serviço node em cluster.
- e claro! um servidor com todas características de segurança/otimizações implementadas: firewall, tunning, ....

Luiz

2012/6/19 Rafael O. Bueno <rafacur...@gmail.com>
index.php
package.json
vmstat.js

André Caribé

unread,
Jun 20, 2012, 11:28:08 AM6/20/12
to nod...@googlegroups.com
Na verdade eu deveria ter falado closure, não é?
Se uma função estiver no escopo global ela poderá ser chamada através do console e até mesmo sobrescrita.
No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por tanto só pode ser acessada dentro do escopo em que ela foi criada.

Exemplo 1
// Script:
function testSecurity() {
console.log('open function?');
}

// Console:
> testSecurity();
   "open function?"
> function testSecurity() { console.log('fuu'); }
> testSecurity();
   "fuu"

Exemplo 2
// Script:
(function () {
    var foo = function (param) {
        console.log(param);
    };
    foo('foo() dentro do escopo');
})();
foo('foo() fora do escopo');

// Console:
"foo() dentro do escopo"
Uncaught ReferenceError: foo is not defined (anonymous function) > foo('mais um teste');
ReferenceError: foo is not defined

Luciano Ramalho

unread,
Jun 20, 2012, 4:05:24 PM6/20/12
to nod...@googlegroups.com
2012/6/20 André Caribé <decoc...@gmail.com>:
É por aí, André. Infelizmente existem muitos mitos e confusões ligadas
ao tema das funções em JavaScript.

A questão não tem nada a ver com o fato de a função ser anônima ou ter
nome, e sim com a forma de sua declaração, se ela é declarada com a
instrução function (function statement) ou na forma de uma expressão
função. Acontece que muitas pessoas confundem "função anônima" com
"expressão função".

Veja estes exemplos:

(function bloco () {
function f (arg) {
        console.log(arg);
};
var g = function (arg) {
        console.log(arg);
};
var h = function hugo (arg) {
        console.log(arg);
};
});
f('bla');

A função f foi declarada em uma instrução function. Essa instrução
"iça" a função para o escopo global (em inglês: içar == hoist), e ela
pode ser acessada fora do bloco, como vemos na última linha.

As funções g e h foram declarada em expressões. Nestes casos não
acontece o içamento (hoisting) e as funções g e h só podem ser
acessada no escopo local da função bloco. Note que a função h não é
uma função anônima, ela se chama hugo (isso é útil para depuração;
especialmente se a função chamada hugo for vinculada a uma variável de
mesmo nome ;-).

Finalmente, a função bloco é uma função com nome (ela se chama bloco)
mas foi definida em uma expressão (este é o motivo de usar parêntesis
em torno da definição da função; sem os parêntesis seria uma instrução
function).

Resumindo, o içamento para o escopo global acontece sempre que a
função é definida em uma instrução function, e nunca quando ela é
definida em uma expressão, independente de ser ou não uma função
anônima. É por causa dessa confusão com a instrução function que o
Douglas Crockford recomenda nunca usar esta forma, mas sempre definir
funções em expressões.

Rafael O. Bueno

unread,
Jun 20, 2012, 7:47:48 PM6/20/12
to nod...@googlegroups.com
Puxa... muito obrigado a todos, pelos esclarecimentos e exemplos, vou seguir em frente e fazer meus testes, se tiverem mais dicas preciosas como essas... MUITO OBRIGADO GENTE, já me alegra de ver uma comunidade ativa assim!

Abraços!

André Caribé

unread,
Jun 20, 2012, 8:49:50 PM6/20/12
to nod...@googlegroups.com
Muito esclarecedora sua explicação Luciano, muito obrigado! :)

Alan Hoffmeister

unread,
Jun 21, 2012, 9:23:57 AM6/21/12
to nod...@googlegroups.com
Eu acho que os cuidados são os mesmos do que outras linguagem,
principalmente a validação dos user inputs. As únicas coisas a
acrescentar é o gerenciamento do processo que como já foi falado antes
se o seu processo morrer por um erro grave ou qualquer outra coisa,
ele não volta sozinho, e o tratamento de dados jogados na memória, por
exemplo:

var user = new Array;
setInterval(function(){
user.push('Hit!');
});

Uma hora ou outra o processo vai quebrar e o seu site estará fora do ar.

--
Att,
Alan Hoffmeister
Reply all
Reply to author
Forward
0 new messages