[Cascavel-pm] [EAD-PERL] Re: Hands-on via web

Nilson Santos Figueiredo Junior acid06 em gmail.com
Quarta Maio 3 14:09:21 PDT 2006


On 5/3/06, Luis Motta Campos <monsieur_champs em yahoo.com.br> wrote:
>    Bravo. E onde vamos rodar esta piromba? Que ISP vai se arriscar a
> saber que existe uma aplicação rodando ali que *permite* por definição a
> execução de código arbitrário, fornecido por um usuário da web?

Erm... pra empresa que estiver hosteando o site tanto faz se o código
é executado pelo usuário do site ou por você. Eles não poderiam se
importar menos, não faz diferença pra eles. Quem tem que preocupar com
segurança somos nós.

A única coisa que é necessária é alguém que tenha algum lugar pra
hospedar o site aonde possamos utilizar FastCGI ou seja possível
deixar um processo rodando em background.

Qualquer solução que envolva muita coisa client-side que não esteja
restrita ao browser está fadada ao fracasso. Particularmente, a
solução falando em PAR é a pior de todas. Até a sugestão que deram pra
usar Java é melhor (apesar de terrível também).

Como eu disse antes, é razoávelmente simples fazer esse hands-on rodar
de forma segura em server-side. Até já fiz o código que faz isso,
falta o front-end bonitinho usando AJAX. A única coisa que você
precisa fazer é restringir o que a pessoa pode fazer pelo Safe e
colocar em volta do código um alarm() pra um tempo razoável (2-3
segundos, por exemplo) pra fazer com que loops infinitos não fiquem
executando eternamente. Se a pessoa conseguir esgotar a memória do
sistema nesse tempo, parabens, mas em 3 segundos ela vai ser liberada
e o pior que pode acontecer é uma exceção de "Out of memory".

A única coisa que você não consegue (e isso de jeito nenhum) é fazer
com que esse interpretador interativo cuide de variáveis léxicas entre
um comando e outro. Isso é impossível de ser feito sem envolver o modo
de debugging interativo possivelmente com uma alteração no próprio
perl - algo completamente inviável. Ou então uma extensão XS pra isso.
Mas isso é overkill, IMO.

Depois seria só uma questão de escrever as "tarefas" a serem cumpridas
no tutorial e isso seria o que gastaria mais tempo e daria mais
trabalho pra fazer algo direito.

O ponto principal é: isso tudo é simples e se alguém tivesse pegado
pra fazer, isso tudo já estaria pronto, provavelmente. O problema
mesmo é que acho que todos estão sem tempo (apesar de sempre
encontrarmos um tempo pra responder emails ;-) ).

Mas eu acho completamente sem sentido gastar o pouco tempo disponível
com essa história de "especificação do projeto". No tempo que você
gastaria fazendo isso, já teria a aplicação pronta. Isso me cheira à
convivência (conivência?) com desenvolvedores Java.

Como attachment vai o código que eu fiz ontem do interpretador
interativo. Ele implementa um interpretador interativo na linha de
comando, com as medidas de segurança que eu citei. E falta tratar
alguns casos para que ele DWIM quanto a pessoa fizer um "print" ou
"warn". Fora isso, o código do "interpretador remoto" está isolado
numa classe, então seria apenas uma questão de trocar o front-end pra
algo via web que o resto poderia ser reutilizado (com refinamentos).

Comecei a fazer o front-end via web usando o Catalyst, mas não sei se
terei tempo de terminar isso tão cedo, então provavelmente seria
melhor se outra pessoa tentasse.

-Nilson Santos F. Jr.
-------------- Próxima Parte ----------
Um anexo não texto foi limpo...
Nome  : perlinterp.pl
Tipo  : application/x-perl
Tam   : 1347 bytes
Descr.: não disponível
Url   : http://mail.pm.org/pipermail/cascavel-pm/attachments/20060503/cf3a4f6f/attachment.bin 


Mais detalhes sobre a lista de discussão Cascavel-pm