ayuda validar caracteres upload

Iniciado por kakashi20, 10 Septiembre 2009, 03:20 AM

0 Miembros y 1 Visitante están viendo este tema.

kakashi20

hola
estoy haciendo una aplicacion a la cual le agregue unos archivos de upload( cargar achivos ) el cual tambien lista los archivos cargados y los forza a descargar...

lista.php

<?php
include("arriba.php");   
$status = "";
 
if ($_POST["action"] == "upload") {
   // obtenemos los datos del archivo
   $tamano = $_FILES["archivo"]['size'];
   $tipo = $_FILES["archivo"]['type'];
   $archivo = $_FILES["archivo"]['name'];
   $prefijo = substr(md5(uniqid(rand())),0,6);
   
   if ($archivo != "") {
      // guardamos el archivo a la carpeta files
      $destino =  "archivos/".$prefijo."_".$archivo;
      if (copy($_FILES['archivo']['tmp_name'],$destino)) {
         $status = "Archivo subido satisfactoriamente: <b>".$archivo."</b>";
      } else {
         $status = "Error al subir el archivo";
      }
   } else {
      $status = "Error al subir archivo";
   }
}
?>


<?php
   echo "".$status;
?>   
<br>
<table height="30" class="texto_titulo" align="center">
<tr>
    <td >Listado de Archivos Subidos </td>
  </tr>
  </table>
   <?php
echo "<table class='texto_tabla' align='center'> ";   
   if ($gestor = opendir('archivos')) {
       while (false !== ($arch = readdir($gestor))) {
         if ($arch != "." && $arch != "..") {
            echo "<tr><td><a href='bajar.php?nom=".$arch."'>".$arch."</a></td>";
            echo "<td>&nbsp;&nbsp;&nbsp;</td>";
            echo"<td><a href='eliminar_archivo.php?nom=".$arch."'>eliminar</a></td> \n ";
         }
       }
       closedir($gestor);
   }
   echo "<br> \n";
   echo "</tr> </table><br>";
   echo"<a href='upload.php>Regresar a Upload</a>";
   ?>
<?php
include("abajo.php");
?>


bajar.php

<?php

$ruta = 'archivos/';//definimos la ruta para las descargas
$error = 'Archivo no disponible para descarga.';
if(isset($_GET['nom']) && basename($_GET['nom']) == $_GET['nom']) {
$getfile=$_GET['nom'];
} else { $getfile = NULL; }
if(!$getfile){ echo $error;
} else {
$filepath = $ruta.'/'.$getfile;
if(file_exists($filepath) && is_readable($filepath)){
$size = filesize($filepath);
header('Content-Type: application/octet-stream');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$getfile);
//header('Content-Transfer-Encoding: binary');
$file = @ fopen($filepath,'rb');
if($file) {
fpassthru($file);
exit;
} else { echo $error; }
} else {echo $error;
} }
?>


en lista php listo los archivos cargados pero el problema es que si cargo un archivo con caractes ("·$%$%, etc....) incluyendo la ñ, a la hora de dar click para descargarlos no los descarga..

mi pregunta es:
alguien me podria decir como valido los caracteres para que no tenga problema a la hora de descargarlos....

les agredeceria si me ayudacen.
gracias



Gorky

Lo mejor seria que renombres los archivos al subirlos.
Lo que puedes hacer es detectar si contiene algun caracter problematico y lo eliminas o lo sustituyes.
Un saludo.

kakashi20

en ese caso como podria renombrarlo o hacer que si tiene un caracter no lo deje subir..?

naderST

haz una función que genere nombres aleatorios con los caracteres de tu preferencia. Algo así:

Código (php) [Seleccionar]
<?php
function gen_nombre(){
for($i 1$i <= 4$i++){
$nombre $nombre.chr(rand(97122));
}

$nombre strtoupper($nombre);
$nombre $nombre.rand(100999);

return $nombre;
}

echo 
gen_nombre();
?>

WHK

Hola, veo algunas fallas de programación en tu script, talves te interese darle un ojo a este post:

http://foro.elhacker.net/nivel_web/vulnerabilidad_en_la_subida_de_imagenes-t266003.0.html

sobre los nombres yo creo que bastaría con pasarlos a md5 y tener una base de datos con el nombre real de cada hash como lo hace smf.