Quais são os mecanismos de segurança do Meteor? [fechadas]

92

Todos nós sabemos que o Meteor oferece o driver miniMongo que permite ao cliente acessar a camada persistente (MongoDB).

Se algum cliente pode acessar a API persistente, como alguém protege seu aplicativo?

Quais são os mecanismos de segurança que o Meteor fornece e em que contexto eles devem ser usados?

Olivier Refalo
fonte
6
Eu adoro que isso já esteja sendo tratado, mas eles realmente deveriam ter mencionado isso no vídeo. Eu acho que praticamente qualquer desenvolvedor web assistindo terá essa pergunta em sua mente a partir de 10 segundos até o final dela, e apenas se sentir aborrecido que, para um produto tão incrível, eles PARECEM estar ignorando completamente o óbvio problema de segurança.
Naatan,
6
Meteor 0.5.0 adicionado autenticação de usuário meteor.com/blog/2012/10/17/…
hipertracker
Você poderia reformular isso um pouco para reabri-lo. Talvez "Que medidas de segurança devo tomar?" ou "Quais opções de segurança estão disponíveis?"
joeytwiddle
1
Baseado em opinião? Wat? Achei que esta foi uma auditoria de reabertura, pois obviamente não é baseada em opinião.
bjb568
Eu meio que concordo, a decisão baseada em opinião está fora do contexto - as respostas são baseadas em fatos verdadeiros.
Olivier Refalo

Respostas:

64

Quando você cria um aplicativo usando o comando meteoro, por padrão, o aplicativo inclui os seguintes pacotes:

  • AUTOPUBLISH
  • INSEGURO

Juntos, eles imitam o efeito de cada cliente ter acesso total de leitura / gravação ao banco de dados do servidor. Essas são ferramentas de prototipagem úteis (apenas para fins de desenvolvimento), mas normalmente não são apropriadas para aplicativos de produção. Quando estiver pronto para o lançamento de produção, basta remover esses pacotes.

Para adicionar mais, o Meteor suporta os pacotes Facebook / Twitter / e Much More para lidar com a autenticação, e o mais legal é o pacote Accounts-UI

Murali Ramakrishnan
fonte
2
Correto a partir do meteoro 0,5
Olivier Refalo
5
Inseguro por padrão. Caramba.
Judá Gabriel Himango
16
@JudahHimango inseguro apenas para fins de teste , e remover esses dois pacotes quando estiver pronto para a produção é tão fácil quanto meteor remove autopublish insecure.
BenjaminRH
1
E os métodos de meteoros? O cliente pode acessar aqueles do console mesmo com desinstalação insegura, pois eles são executados no servidor. Como torná-los seguros?
Matanya
2
@Matanya, mas ao usar e executar a partir do console, ele gerará um access deniederro. Confira.
ajduke
35

Nas coleções, o documento diz:

Atualmente, o cliente recebe acesso de gravação total à coleção. Eles podem executar comandos de atualização arbitrários do Mongo. Assim que construirmos a autenticação, você poderá limitar o acesso direto do cliente para inserir, atualizar e remover. Também estamos considerando validadores e outras funcionalidades semelhantes a ORM.

pomber
fonte
1
Veja também este tópico no Quora com uma resposta de um dos desenvolvedores do Meteor: quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
dentarg
1
@jonathanKingston o link está quebrado, você poderia atualizá-lo, por favor?
Carlos Barcelona
@CarlosBarcelona O domínio expirou e o artigo era anterior às atualizações de segurança no Meteor. Acho que é justo dizer que estava desatualizado; então removi o comentário para economizar tempo das pessoas. Obrigado
jonathanKingston
5

Se você está falando sobre restringir o cliente a não usar nenhuma de suas APIs de inserção / atualização / exclusão não autorizadas, isso é possível.

Veja o aplicativo de tarefas deles em https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

Além disso, eles agora adicionaram um módulo AUTH integrado, que permite fazer login e registrar-se. Portanto, é seguro. Desde que você esteja cuidando de XSS, Valiations, cabeçalhos de cliente, etc.

mas você pode a qualquer dia converter o aplicativo meteoro em um aplicativo nodejs totalmente funcional implantando no node. Portanto, se você sabe como proteger um aplicativo nodejs, deve ser capaz de proteger o meteoro.

Hitesh Joshi
fonte
1
Isso é totalmente verdade em setembro de 2012
Olivier Refalo
2

A partir de 0.6.4, durante o modo de desenvolvimento, os blocos is_client e is_server ainda vão para o sistema cliente. Não posso dizer se eles são separados quando você desliga o modo de desenvolvimento.

No entanto, se não forem, um hacker pode ser capaz de obter uma visão do sistema revisando os blocos do código if (Meteor.is_server). Isso me preocupa particularmente, especialmente porque observei que ainda não consigo separar as Coleções em arquivos separados no cliente e no servidor.

Atualizar

Bem, a questão é não colocar o código relacionado à segurança em um bloco is_server em um diretório que não seja do servidor (ou seja, certifique-se de que esteja em algo sob / server.

Eu queria ver se eu estava louco por não ser capaz de separar as coleções de cliente e servidor nos diretórios de cliente e servidor. Na verdade, não há problema com isso.

Aqui está meu teste. É um exemplo simples do modelo de publicação / assinatura que parece funcionar bem. http://goo.gl/E1c56

Drm
fonte
1
A solução seria salvar seu código no servidor / pasta - dessa forma ele não será enviado ao cliente.
Olivier Refalo
DrM, consulte docs.meteor.com/#structuringyourapp - o código sensível não precisa ser entregue ao cliente
emgee
Experimente algo simples; crie uma coleção em um arquivo do servidor e, em seguida, crie a mesma coleção no arquivo do cliente e diga-me o que acontece. Em seguida, crie um arquivo raiz com a declaração da coleção e, em seguida, simplesmente faça referência a isso em um arquivo de diretório de servidor e cliente e diga-me o que acontece. Se você não pode criar a coleção, como eu não poderia, como você pode fazer referência a eles independentemente? No final, você precisa que a referência à coleção exista no mesmo arquivo disponível do cliente e use is_server e is_client. Espero estar errado, mas ainda não descobri como ou por quê.
DrM
Hmm, estranho, o teste parece estar bem, atualizarei a resposta
DrM
O link é um repositório para código simples, mas parece funcionar bem, não tenho certeza de quais foram os erros estranhos no passado ou como eu poderia recriá-los.
DrM