Você pode deixar os usuários enviarem aplicativos Sinatra e executá -los dentro do Rails como middleware?

StackOverflow https://stackoverflow.com/questions/2513877

Pergunta

Quero permitir que os usuários escrevam pequenos aplicativos personalizados (pense em temas ou plugins no WordPress) e envie/execute -os no meu site.

Estou pensando em usar aplicativos Sinatra para isso, pois isso daria aos usuários muita flexibilidade e, em seguida, executá -los como middleware dentro do meu aplicativo Rails.

Mas não consigo descobrir as implicações de segurança disso. Tentei criar um aplicativo Sinatra simples como middleware e ele tem acesso a todos os modelos Rails e tudo mais - o que é ruim. Existe uma maneira de o rack mantê -los separados para que os aplicativos Sinatra sejam efetivamente sandbox e não possam fazer coisas ruins (fora de uma API ou de alguma maneira específica que eu configuro para que eles me comuniquem)?

Pode haver uma maneira mais fácil de conseguir isso que eu também não pensei, então as idéias são bem -vindas. Obrigado!

Foi útil?

Solução

Talvez uma olhada em Tryruby / A caixa de areia esquisita ou um dos outro Ruby Sandboxes poderia levá -lo a algum lugar.

Outras dicas

Quão bem você conhece/confia em seus usuários? Espero que a resposta contenha palavras como "extremamente" e "intimamente". Com que facilidade você poderia alcançá -los com algo nítido e doloroso se eles estragarem tudo?

Não consigo pensar em uma maneira simples (diabos, não consigo pensar em um complicado) para permitir o upload e a instalação de tais coisas. Mesmo com o WordPress, acho que eles não permitem que nenhum plug-in aleatório seja instalado/executado no site hospedado no WP-os riscos de um código bem-intencionado causando problemas parecem imensos para minha mente paranóica.

Sinatra certamente daria flexibilidade, mas isso pode não ser uma coisa boa, como você já identificou.

Obviamente, se seus usuários são rubi/sinatra alfabetizada (ou capaz de se tornar aceitavelmente), você poderá dar a eles um repositório (git, svn ou qualquer outra coisa) para seus aplicativos e implantá -los no local apropriado no rack, ou Ad hoc ou em algum cronograma.

Pensando no casco e sem nenhuma noção de viabilidade, se as funções que podem ser disponibilizadas com segurança forem relativamente limitadas, considere procurar escrever algum tipo de DSL restrito para que eles utilizem. Se os scripts assim produzidos fossem curtos/eficientes o suficiente, talvez pudessem ser armazenados no banco de dados do aplicativo e executados via eval?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top