[Cascavel-pm] dúvida sobre cpan

Nilson Santos Figueiredo Junior acid06 em gmail.com
Sexta Julho 28 19:30:40 PDT 2006


On 7/28/06, Breno G. de Oliveira <breno em clavis.com.br> wrote:
> na verdade eu queria pedir desculpas, pois o problema que mostrei
> refere-se a um bug no perl em si, e o usuário malicioso poderia
> simplesmente fazer algo como:

Notado (como já respondido em privado diretamente pra você).

> Imagino não ser difícil supor que um módulo defeituoso permitisse que um
> usuário preso a esse mundo seguro conseguisse sair e fazer alguma
> besteira em seu sistema (lembrando que para causar estrago vc não

O Safe restringe a compilação de opcodes específicos. Os módulos
externos são compilados fora desse compartimento e portanto, não
ocorre nenhuma restrição sobre eles. Cabe a quem está permitindo o
acesso a esses módulos determinar se alguma das funções desse módulo
não deveriam ser permitidas dentro do compartimento. Então se você
liberou o acesso a algo externo para o compartimento, isso já é um
risco de segurança, pois quase qualquer módulo útil faz coisas como
escrever em arquivos, abrir sockets, ou qualquer outra coisa
possivelmente "perigosa" (sob esse ponto de vista). Se o módulo fosse
compilado dentro do compartimento que ele estaria sujeito às
restrições de segurança.

> precisa ser root). Ou ainda se vc pensar que, dentro de sua estrutura
> "segura", vc deixa o sujeito usar apenas alguns módulos, e um deles
> apresenta esse defeito na versão nova. Como fazer rapidamente o
> downgrade de volta à versão anterior?

perl -MCPAN -e "install A/AU/AUTOR/Nome::Modulo-0.versaoantiga.tar.gz"

Mas se seu modelo de segurança fosse baseado em algo assim eu
consideraria que tem algo errado (ou, no mínimo, estranho). ;-)

> As vezes a gente acha que um problema não existe apenas pq não existe
> para nós. Mas se as pessoas estão perguntando na lista, é pq deve haver
> *alguma* necessidade, não acha? Afinal, se está até no FAQ do CPAN, o
> Leonardo não deve ser o único a ter essa dúvida ;)

Muitas vezes, as pessoas já estão induzidas a buscar as soluções menos
adequadas ou tentam solucionar o problema errado. Esse é o principal
problema.

Quando alguém me pergunta alguma coisa, muitas vezes, minha resposta
inicial vem na forma da seguinte pergunta: "O que você está tentando
fazer?"

Um exemplo simples e bobo mas que talvez seja suficiente pra ilustrar
a idéia: um iniciante em Perl pode te perguntar como que faz pra
concatenar strings em Perl. Você responderia:

  $str3 = $str1 . $str2.

Algum tempo depois, você olha o código e vê algo assim:

  print $nome . $delimitador . $sobrenome . $delimitador . $idade .
$delimitador . $etc;

Se você soubesse o problema inteiro, poderia ter sugerido uma forma
mais legível:

  print join $delimitador, $nome, $sobrenome, $idade, $etc;

Para problemas mais complexos, muitas vezes, a solução será algo que
foge do aspecto de pura implementação e cai em pontos como design do
programa ou estilo de programação, boas práticas, etc.

-Nilson Santos F. Jr.


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