Saltar al contenido

Verifique la extensión del archivo en el formulario de carga en PHP

Solución:

Utilizando if( $ext !== 'gif') podría no ser eficiente. ¿Qué pasa si permites como 20 extensiones diferentes?

Tratar:

$allowed = array('gif', 'png', 'jpg');
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array($ext, $allowed)) {
    echo 'error';
}

No se considera una buena práctica comprobar la extensión del archivo. El método preferido para realizar esta tarea es comprobar el tipo de archivos MIME.

Desde PHP:

<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // Return MIME type
    foreach (glob("*") as $filename) {
        echo finfo_file($finfo, $filename) . "n";
    }
    finfo_close($finfo);
?>

El ejemplo anterior generará algo similar a lo que debería verificar.

text/html
image/gif
application/vnd.ms-excel

Aunque los tipos MIME también se pueden engañar (editar los primeros bytes de un archivo y modificar los números mágicos), es más difícil que editar un nombre de archivo. Por lo tanto, nunca puede estar 100% seguro de qué tipo de archivo es realmente, y debe tener cuidado al manejar los archivos cargados / enviados por correo electrónico por sus usuarios.

Personalmente, prefiero usar la función preg_match ():

if(preg_match("/.(gif|png|jpg)$/", $filename))

o in_array ()

$exts = array('gif', 'png', 'jpg'); 
if(in_array(end(explode('.', $filename)), $exts)

Con in_array() puede ser útil si tiene muchas extensiones para validar y realizar preguntas. Otra forma de validar imágenes de archivos: puede usar @imagecreatefrom*(), si la función falla, esto significa que la imagen no es válida.

Por ejemplo:

function testimage($path)
{
   if(!preg_match("/.(png|jpg|gif)$/",$path,$ext)) return 0;
   $ret = null;
   switch($ext)
   {
       case 'png': $ret = @imagecreatefrompng($path); break;
       case 'jpeg': $ret = @imagecreatefromjpeg($path); break;
       // ...
       default: $ret = 0;
   }

   return $ret;
}

luego:

$valid = testimage('foo.png');

Asumiendo que foo.png es un archivo de script PHP con .png extensión, la función anterior falla. Puede evitar ataques como actualización de shell y LFI.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *