Re: [Cascavel-pm] Como listar somente imagens de um diretório?
Breno G. de Oliveira
breno em clavis.com.br
Quarta Setembro 7 15:51:27 PDT 2005
João Gabriel wrote:
> Entrando na discussão...
> quais seriam os possiveis riscos?
>
JG, os riscos são relacionados a dados vindos de fora do seu programa
afetando elementos também de fora do seu programa. Por exemplo, supondo
o seguinte trecho de código:
-------------8<-------------
opendir(dir, ".");
@fotos = readdir(dir);
closedir(dir);
foreach(@fotos) {
system "gimp $_\n" if /\.jpg/;
}
-------------8<-------------
Esse programa, aparentemente inofensivo, abre no "gimp" todos os
arquivos de um diretorio com a extensão ".jpg". Agora experimente
digitar o seguinte comando:
$ touch "bla.jpg;echo walla"
depois disso, ao ser executado, o script vai encontrar o arquivo
"bla.jpg;echo walla" e vai executar a chamada ao sistema com o seguinte
comando:
$ gimp bla.jpg;echo walla
Que por sua vez vai fazer o gimp tentar abrir o arquivo "bla.jpg" (que
nao existe) e depois disso vai executar o comando "echo walla", que vai
exibir "walla" no terminal.
Esse exemplo é ingênuo (trocar a expressão regular pra /\.jpg$/ já
acabaria com meu "ataque", mas será que esse tipo de descuido não
acontece por aí?), até pq não passei muito tempo pensando em um método
efetivo e escondido de ataque dentro de um programa real e nem acho que
coubesse ao escopo do email. Também é inofensivo (imagine se, ao invés
de "echo bla" tivesse "rm -rf /"), mas acho que deu pra perceber um
pouco das implicações de segurança que confiar em dados externos ao seu
programa podem causar. ;)
Repare que se eu ativo o modo "taint" (passando o parâmetro -T ou
rodando o .pl com uid/gid reais diferentes dos uid/gid efetivos), o perl
impede a execução do programa acima dizendo:
Insecure $ENV{PATH} while running with -T switch at teste.pl line 6.
Espero ter ajudado.
[]s
breno
Mais detalhes sobre a lista de discussão Cascavel-pm