Quais são minhas opções para scripts em área restrita no servidor? [fechadas]


11

Estou construindo um site público no qual os usuários compartilham dados e scripts para executar alguns dados. Os scripts são executados no servidor em algum tipo de sandbox sem outra interação neste ciclo: meu programa Perl lê em um banco de dados um script criado pelo usuário, adiciona os dados a serem processados ​​no script (ou seja: um documento JSON) e depois chama o intérprete. retorna a resposta (um documento JSON ou texto sem formatação), eu salvo no banco de dados com o meu script perl. O script deve poder ter algum acesso às funções internas adicionadas à linguagem de script por mim, mas nada mais.

Então, eu me deparei com o node.js como intérprete de javascript, e uma hora ou mais atrás com o V8 do Google (o v8 faz sentido para esse tipo de coisa?). O CoffeeScript também me veio à mente, pois parece bom e ainda é Javascript.

Eu acho que o javascript é bastante difundido e mais "sandboxeable", uma vez que não possui chamadas de SO nem nada remotamente inseguro (eu acho).

a propósito, estou escrevendo o sistema em Perl e Php para o front end.

Para melhorar a pergunta: estou escolhendo o Javascript porque acho que é seguro e simples o suficiente para implementar com o node.js, mas quais outras alternativas são para atingir esse tipo de tarefa? Lua? Pitão? Não consigo encontrar informações sobre como executar um intérprete em área restrita de maneira adequada.


Não está claro o que você está perguntando. É possível? Claro, é possível.
Robert Harvey

Respostas:


3

Java contém intérprete JavaScript embutido. Por padrão, não está na área restrita, mas isso pode ser ativado por:

  • configurando o obturador de classe correto - o JavaScript normalmente pode carregar as classes Java. Obturador de classe é um tipo de gerenciador de segurança que decide quais classes podem ser carregadas e quais não.
  • Script "startup" - inicialização curta do JavaScript que exclui pontos de acesso ao sistema externo: java = undefined;Packages = undefined;org = undefined;

Se você fizer isso, os scripts em execução no interior não poderão acessar o ambiente externo de nenhuma maneira.

Ele também fornece o tempo limite do script e a funcionalidade de limitação da contagem de instruções, útil para o sandbox - você pode limitar quanto tempo ou quão complexo o script é.

Eu usei isso no Java 7, que possui o mecanismo Rhino JavaScript. O Java 8 tem o mais novo e mais moderno mecanismo Nashorn - eu não tentei com o Nashorn, mas espero que seja semelhante.


Você pode colocar na lista de permissões em vez de na lista negra?
Petah 26/05

@ Petah, você pode primeiro desabilitar (lista negra) tudo e depois inserir algumas funcionalidades específicas na forma de objeto na caixa de areia. Isso é essencialmente uma lista de permissões, então sim, você pode fazer isso.
Qbd

O conhecimento de JavaScript é amplo o suficiente para torná-lo uma boa escolha como uma linguagem de script. Você pode definir algumas globais e chamadas para usuários, pois você está restringindo o acesso às chamadas. Pense em como o navegador define windowvariáveis ​​para JavaScript para permitir a interação.
Michael Shopsin

2

meu primeiro pensamento foi node.js - como você mencionou acima, é um interpretador de javascript. E é exatamente isso que você precisa, se quiser colocar os scripts em uma caixa de areia de uma maneira realmente segura.

Outra maneira seria verificar todos os comandos de um script, se é válido ou não. Mas acho que você não receberá uma caixa de proteção segura.

saudações


Existe algum suporte para sandbox no NodeJS ou disponível com o NodeJS?
Ysdx #


+1 para o ótimo link para "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Jack Stone

Nota: o sandbox gf3 pode ser quebrado.
Petah
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.