Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/02/2004, 07:08
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Solucion 1: si conoces la lista de ficheros que vienen en ese parametro, pon esa lista en un array, compruebas si el parametro esta en el array, y si no esta le mandas una sorpresa:
Código PHP:
$ficheros=array("doc1.html","doc2.dat");
if (!
in_array($_GET['file'],$ficheros)) {
  echo 
"INTRUSO, INTRUSO! Mandando bomba digital ;=)";
  exit;

Quien dice un array, dice una base de datos. Y quien dice que el parametro es el nombre del fichero, dice que es la clave de un indice de un array asociativo.

Solucion 2: si el parametro puede ser un nombre de fichero, y no puede ser una ruta, lo que puedes hacer es coger solo el nombre del fichero del parametro. Mira la funcion basename() (www.php.net/basename).

Solucion 3: si en el parametro puede venir nombre y ruta, tendrias que asegurarte que la ruta apunta a un directorio permitido. Para hallar el verdadero path, puedes usar la funcion realpath() (www.php.net/realpath). Eso resolvera todos los .. del parametro. Solo tendrias que comprobar que el resultado esta dentro de tus directorios permitidos.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.