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.
Respostas:
Java contém intérprete JavaScript embutido. Por padrão, não está na área restrita, mas isso pode ser ativado por:
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.
fonte
window
variáveis para JavaScript para permitir a interação.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
fonte