Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/07/2012, 14:47
Xilsh
 
Fecha de Ingreso: enero-2009
Ubicación: San Lorenzo - Paraguay
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 6
De acuerdo Aporte - Validar Upload

Hola amigos del foro, quiero colaborar un código para validar la subidas de archivo al servidor, debido a las vulnerabilidades que existen y el peligro que nos suban una webshell al servidor. Aquí les dejo y espero les guste, es código libre y ya saben que eso significa mejorar.. Yo hice muy sencillo y rápido. Chau!!!

validarUpload.class.php
Código PHP:
<?php
/**
*   PHP Validar Upload Class 1.0 - 23/07/2012
*   Copyright (C) 2012  Silvio Valentín Báez
*
*   Este programa es software libre: usted puede redistribuirlo y/o modificarlo 
*   bajo los términos de la Licencia Pública General GNU publicada 
*   por la Fundación para el Software Libre, ya sea la versión 3 
*   de la Licencia, o (a su elección) cualquier versión posterior.
*
*   Este programa se distribuye con la esperanza de que sea útil, pero 
*   SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita 
*   MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO. 
*   Consulte los detalles de la Licencia Pública General GNU para obtener 
*   una información más detallada. 
*
*   Debería haber recibido una copia de la Licencia Pública General GNU 
*   junto a este programa. 
*   En caso contrario, consulte <http://www.gnu.org/licenses/>.
*
*    Contactos:    [email protected]    
*    Descargar:    http://www.webbae.net/proyectos/php-validar-upload.rar
*    
*/
class validarUpload{
        
    public 
$extensiones 'gif|jpg|png';

    protected function 
imagen($archivo,$extension){
        
$imagenes = array('bmp','gif','jpg','png');

        foreach(
$imagenes as $ext){
            if(
$extension==$ext){
                if(
getimagesize($archivo)==false){
                    
$resultado false;
                }else{
                    
$resultado true;
                }
            }else{
                
$resultado true;
            }
        }
        return 
$resultado;
    }
    
    public function 
formato($tipo){
        
$tipos = array(
            
'image/jpeg' => 'jpg',
            
'image/jpg' => 'jpg',
            
'image/pjpeg' => 'jpg',
            
'image/gif' => 'gif',
            
'image/png'    => 'png',
            
'application/vnd.openxmlformats-officedocument.word' => 'docx',
            
'application/msword' => 'doc',
            
'application/vnd.openxmlformats-officedocument.pres' => 'pptx',
            
'application/vnd.ms-powerpoint' => 'ppt',
            
'application/pdf' => 'pdf',
            
'text/plain' => 'txt',
            
'video/mpeg' => 'mpeg'
        
);
        foreach(
$tipos as $mime=>$formato){
            if(
$mime==$tipo){
                return 
$formato;
            }
        }
    }
    
    public function 
validar($archivo){
        
$tipo $_FILES[$archivo]['type'];
        
$extension explode('|',$this->extensiones);
        
$generarNombre time().md5(uniqid(rand()));
        
$archivoFormato $this->formato($tipo);
        
$imagen $this->imagen($_FILES[$archivo]['tmp_name'],$archivoFormato);
        
        if(
$imagen==true){
            foreach(
$extension as $ext){
                if(
$archivoFormato==$ext){
                    
$resultado true;
                }
            }
            
            if(
$resultado==true){
                return 
$generarNombre.'.'.$archivoFormato;
            }else{
                return 
false;
            }
        }else{
            return 
false;
        }
    }
    
}
?>
index.php
Código PHP:
<?php require('validarUpload.class.php'); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP Validar Upload Class</title>
</head>
<body>

<?

if(isset($_FILES['archivo'])){
    
$validarUpload = new validarUpload();
    
$validarUpload->extensiones 'pdf|jpg|png|doc';
    
$archivo $validarUpload->validar('archivo');
    
    if(
$archivo==false){
        echo 
'El archivo no es valido.';
    }else{
          
$directorio 'archivos/';
          
$guardar $directorio $archivo;
          if(
copy($_FILES['archivo']['tmp_name'], $guardar)) {
              echo 
'El archivo se subio correctamente.';
          }else{
              echo 
'Error al subir el archivo.';
          }
    }
    exit;
}

?>

<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="archivo" />
<input type="submit" value="enviar">
<div>Archivos permitidos: pdf|jpg|png|doc</div>
</form>
</body>
</html>
Aqui les dejo el enlace por si quieran descargar o ver un demo:

demo: http://www.webbae.net/proyectos/php-validar-upload/index.php
descargar: http://www.webbae.net/proyectos/php-validar-upload.rar