Funções com número variável de argumentos

Tags: , — July 11, 2007 @ 6:25 pm

Quando você não sabe quantos parâmetros uma função deverá receber, pode utilizar uma função com número indefinido de parâmetros (geralmente documentadas como function name ([param [, param [, …]]])).

Para isto o PHP4 (e posteriores) possui três funções específicas, que obtém o número e quantidade de parâmetros enviados a função, func_num_args(), func_get_arg() e func_get_args(). Estas funções devem utilizadas dentro de sua função. Veja o código a seguir:

/*diz olá a todos os nome enviados
 */
function sayHelloToAll ()
{
    $numArgs = func_num_args();
    $argList = func_get_args ();
    for ($i = 0; $i < $numArgs; $i++)
    {
        echo "Hello {$argList[$i]}n";
    }
}
//imprime:
//'Hello Paulo'
//'Hello Diovani'
//'Hello SamuraiDio'
sayHelloToAll ('Paulo', 'Diovani', 'SamuraiDio');

Você poderá usar um foreach() para navegar entre os parâmetros obtidos em $argList, mas não é recomendável, visto que gerará um erro caso não seja passado nenhum parâmetro a função (a menos que você inicialize a variável previamente).

Caso precise declarar uma função que receba ou não apenas dois ou três parâmetros, no máximo, seria preferível utilizar uma função com argumentos não obrigatórios (post anterior), pois será mais seguro, e você poderá prever melhor o resultado de seu sistema.

Se você gostou deste artigo, inscreva-se em meu RSS feed!

Parâmetros opcionais em Funções

Tags: , — @ 5:43 pm

Este post é um complemento para o próximo post. Como minha intenção era falar sobre funções com número de parâmetros indefinidos, achei melhor postar primeiro sobre funções com parâmetros opcionais, uma vez que, na maioria dos casos, esta solução é suficiente.

Caso precise declarar uma função que receba de 0 a n parâmetros, desde que n seja um quantidade definida, podemos utilizar funções com parâmetros opcionais, estes parâmetros terão um valor padrão (sempre uma constante, nunca uma variável) que será utilizado caso não seja passado nenhum parâmetro à função. Veja o exemplo:

function sayHello ($name = ‘SamuraiDio’)
{
    echo “Hello $name”;
}
sayHello (’Paulo Diovani’) ; //imprime ‘Hello Paulo Diovani’
sayHello (); //imprime ‘Hello SamuraiDio’

Os últimos parâmetros que devem ser os opcionais, no caso de mais de um parâmetro.

/*funciona, desde que seja passado o
 *primeiro parâmetro, pelo menos
 */
function sayHello ($name1, $name2 = ‘SamuraiDio’)
{
    echo “Hello $name”;
}
/*não funciona, pois a função esperará pelo
*segundo parâmetro,
*e para este ser informado deverá ser
*também informado o primeiro
*/
function sayHello ($name1 = ‘SamuraiDio’, $name)
{
    echo “Hello $name”;
}

Este método para declarar funções é muito útil, e geralmente usado em funções de ordenação e afins:

/*ordena o array passado em $array
*em ordem crescente.
*se o segundo parâmetro for passado
*como TRUE, o array será
*ordenado em ordem decrescente.
*/
function arrayOrder (&$array, $desc = FALSE)
{
    if ($desc == FALSE)
    {
        sort($array);
    }
    else
    {
        rsort ($array);
    }
    return ($array);
}

Esse tipo de função, com parâmetros opcionais, geralmente são documentadas da seguinte forma: array arraySort ( array array [, bool desc] )

Se você gostou deste artigo, inscreva-se em meu RSS feed!

Gif Injection

Tags: , — June 20, 2007 @ 12:29 pm

Recebi um artigo nesta manhã, do PHP Classes, sobre uma falha de segurança em PHP usando imagens *.gif, onde um usuário poderia inserir códigos php malicioso na imagem.

Eu mesmo fiz alguns testes quanto a vulnerabilidade, que pode ser encontrada em websites que não verifiquem a extensão e conteúdo de um arquivo enviado por upload, verificando, no máximo, as dimensões da imagem.

A função getimagesize() retornará valores nulos caso usada em um arquivo que não seja uma imagem válida, assim, um website que verifique o tamanho de uma imagem antes de serví-la não aceitará normalmente scripts PHP em seus uploads… porém, caso o código PHP seja inserido ao final de uma imagem, a função getimagesize() ainda retornará as dimensões da imagem e o tipo mime corretamente.

Em meu teste utilizei uma imagem GIF de 15×15 brasil.gif. então eu renomeei o arquivo para brasil.gif.php e simplesmente inseri meu código php ao final do arquivo, utilizando um editor de texto simples, com o vi.

PHP Injection on GIF Image

Assim, ao servir a imagem simplesmente apontanto o browser para o arquivo ‘brasil.gif.php’ o código php será executado normalmente, e a função getimagesize() ainda retornará o tamanho da imagem corretamente (achei interessante o modo como o Thunar, gerenciador de arquivos do Xfce4, descreve o arquivo em questão: ‘”brasil.gif.php” (403 B) Script PHP, Tamanho da Imagem: 15×15′).

Esta não chega a ser uma flaha de segurança muito problemática, visto que não é difícil de resolver, para isto, basta seguir algumas precauções de segurança:

  • Renomeio os arquivos (verifique o tipo mime do arquivo, <? $size = getimagesize($filename); $mime = $size[’mime’]; ?> e renomeio com a extensão adequada);
  • Não sirva diretamente as imagens enviando a url da imagem ao browser, utilize funções como readfile() para isso (envie o tipo de cabecalho e utilize uma função php para exibir a imagem, como <? header (’Content-Type: image/gif’); readfile ($image_path); ?>

Com pequenos cuidados como estes você não precisará se preocupar…

Fontes: http://www.phpclasses.org/blog/post/67-PHP-security-exploit-with-GIF-images.html, http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/

Se você gostou deste artigo, inscreva-se em meu RSS feed!

TIOBE Programming Community Index

Tags: , , — May 16, 2007 @ 3:44 pm

A Comunidade de Programação TIOBE divulga todo mês uma pesquisa da popularidade das linguagens de programação.

Este mês o PHP ficou em quarto lugar, precedido por Java, C e C++. Conforme a pesquisa, a popularidade da linguagem Ruby, que vinha crescendo nos últimos meses, parou no décimo lugar.

Veja a pesquisa no índice da comunidade TIOBE em
http://www.tiobe.com/index.htm?tiobe_index

Se você gostou deste artigo, inscreva-se em meu RSS feed!

Hierarquia dos Programadores

Tags: , — April 16, 2007 @ 5:38 pm

Um amigo me enviou este diagrama da hierarquia dos programadores.
De cima para baixo, Se acha superior a…

Programmer Hierarchy

Versão em PDF aqui.
Tradução do comentário, abaixo:

“Programadores Ruby consideram a si mesmos superiores a todos, mas não estão cientes da existência de linguagens não-web, assim, neste diagrama, aparecem sobre Programadores Pearl”

Obviamente o diagrama é uma brincadeira, mas não deixa de ser bastante realista, hehehe. Ainda não encontrei o autor, se alguem souber favor, me avise.

Se você gostou deste artigo, inscreva-se em meu RSS feed!

<<< Previous Page