Funções PHP |
. Glossários Funções PHP - is_uploaded_file ( ) |
(PHP 3>= 3.0.17, PHP 4 >= 4.0.3, PHP 5)
is_uploaded_file -- Diz se o arquivo
foi uploaded via HTTP POST
bool is_uploaded_file ( string filename)
Retorna TRUE se o arquivo com o nome filename foi uploaded via HTTP POST. Isto é útil para ter certeza que um usuário malicioso, não está tentando confundir o script em trabalhar em arquivos que não deve estar trabalhando --- por exemplo, /etc/passwd.
Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer coisa feita com os arquivos carregados poderiam revelar o seu conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.
is_uploaded_file() está disponível somente em versões do PHP 3 depois da 3.0.16 e em versões do PHP 4 posteriores a 4.0.2. Se você ainda está utilizando uma versão anterior, você pode utilizar o seguinte código para se proteger:
Nota: O exemplo seguinte não funcionará em versões do PHP posteriores a 4.0.2. Isto depende de uma funcionalidade interna do PHP que mudou depois dessa versão.
Exemplo:
<?php
/* Teste de arquivo carregado pelo usuário
*/
function is_uploaded_file($filename) {
if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
$tmp_file = dirname(tempnam('', ''));
}
$tmp_file .= '/' . basename($filename);
/* Pode haver uma barra no final do php.ini... */
return (ereg_replace('/+', '/', $tmp_file) == $filename);
}
/* Utilize isto se por acaso
você não tiver
* move_uploaded_file() em versões antigas: */
if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {
copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
} else {
echo "Possível ataque de carregamento de arquivo:
filename '$HTTP_POST_FILES[userfile]'.";
}
?>
Veja também move_uploaded_file() e a seção Manipulando upload de arquivos para um exemplo de utilização desta função.