is_uploaded_file

(PHP 3>= 3.0.17, PHP 4 >= 4.0.3)

is_uploaded_file -- Indica si un archivo fue cargado a través de HTTP POST

Descripción

bool is_uploaded_file ( string nombre_archivo)

Devuelve TRUE si el archivo dado por nombre_archivo fue cargado a través de HTTP POST. Esto es útil para ayudar a verificar que un usuario malicioso no ha intentado engañar al script haciéndole trabajar sobre archivos con los que no debería trabajar--por ejemplo, /etc/passwd.

Este tipo de chequeo es especialmente importante si existe alguna posibilidad de que cualquier cosa realizada con archivos cargados pueda revelar sus contenidos al usuario, o incluso a otros usuarios en el mismo sistema.

is_uploaded_file() se encuentra disponible únicamente en versiones de PHP 3 superiores a PHP 3.0.16, y en versiones de PHP 4 superiores a 4.0.2. Si está atrapado usando una versión anterior, puede usar la siguiente función para protegerse:

Nota: El siguiente ejemplo no trabajará con versiones de PHP 4 superiores a 4.0.2. Depende en la funcionalidad interna de PHP que fue modificada luego de esa versión.

<?php
/* Prueba de usuario para verificar un archivo cargado. */
function is_uploaded_file($nombre_archivo)
{
    if (!
$archivo_tmp = get_cfg_var('upload_tmp_dir')) {
        
$archivo_tmp = dirname(tempnam('', ''));
    }
    
$archivo_tmp .= '/' . basename($nombre_archivo);
    
/* El usuario puede tener una barra final en php.ini... */
    
return (ereg_replace('/+', '/', $archivo_tmp) == $nombre_archivo);
}

/* Asi es como se usa, ya que tampoco se cuenta con
* move_uploaded_file() en estas versiones antiguas: */
if (is_uploaded_file($HTTP_POST_FILES['archivo_de_usuario'])) {
    
copy($HTTP_POST_FILES['archivo_de_usuario'], "/lugar/a/colocar/el/archivo/cargado");
} else {
    echo
"Posible ataque de archivo entrante: nombre de archivo '$HTTP_POST_FILES[archivo_de_usuario]'.";
}
?>

Vea también move_uploaded_file(), y la sección Gestión de carga de archivos para un ejempo de uso sencillo.