Manual de PHP

 
 
 

Mapa Web

 
borde   borde
Portada arrow Lista de Códigos PHP arrow Proteger Descargas en PHP

 

Proteger Descargas en PHP Imprimir E-mail

Muchas veces, desde otra página web, enlazan directamente a un archivo de nuestro servidor, esto sobrecarga nuesto ancho de banda sin reportarnos ningún beneficio, para evitarlo podemos tomar algunas medidas a la hora de enviar el archivo.

Comprovar el referente
Podemos restringir a que solo se pueda descargar el archivo cuando se proviene de una determinada página, esto sería efectivo si no hubiera usuarios que navegan detrás de proxys que eliminan el referente, en este caso ninguno de estos usuarios podría descargar el archivo ni que proviniera de la página correcta.

Usar una cookie
En mi opinión este método es mas eficaz, guardaremos una cookie en la página donde situamos el enlace hacia nuestra descarga, de esta manera luego podremos comprobar que préviamente se ha pasado por esa página, es decir, que la descarga está autorizada:

<?php
// Esto tiene que estar al principio del
// todo del documento antes de enviar nada
// al navegador (ni siquiera un espacio)
// de lo contrario tendremos un error
setcookie ( 'descarga' , '1' );
?>

Luego situaremos el archivo a descargar en una carpeta secreta a la que daremos un nombre aleatório para que no sea fácil de encontrar, por ejemplo 23hi938fdfgh39, y crearemos el siguiente archivo:

descargar.php

<?php
// Indicamos el nombre del directório
define ( 'dir' , '23hi938fdfgh39' );
// Comprovamos que exista la cookie
if( $_COOKIE [ 'descarga' ] == '1' ){
// Si existe la cookie intentamos
   // leer el archivo
$archivo = $_GET [ 'archivo' ];
   if( file_exists ( dir . '/' . $archivo )){
// Si existe el archivo lo enviamos
header ( 'Content-Type: application/octet-stream' );
header ( 'Content-Disposition: attachment; filename=' . $archivo );
     echo file_get_contents ( dir . '/' . $archivo );
   } else {
// Sino existe el archivo enviamos
     // un error 404
header ( 'HTTP/1.0 404 Not Found' );
     echo '<h1>ERROR</h1><br />No se h' ,
'a encontrado el archivo sol' ,
'icitado' ;
   }
} else {
// Sino hay cookie enviamos un error
   // 401
header ( 'HTTP/1.0 401 Unauthorized' );
   echo '<h1>ERROR</h1><br />No puedes' ,
'acceder a este archivo desde ' ,
'un servidor externo' ;
}
?>

Entonces desde la página donde hemos creado la cookie podemos llamar a descargar el archivo haciendo un enlace hácia descargar.php?archivo=NOMBRE.ZIP, por ejemplo:

<a href="descargar.php?archivo=chat.zip">Descargar</a>

Y con este sencillo método habremos protegido nuestros archivos de la descarga externa mediante cookies.

Artículo por cortesía de Eloi de San Martín
www.programacionweb.net

 

 
Portada
Capítulos del Manual de PHP
Introducción a PHP
Variables
Mi Primer Script PHP
Operadores en PHP
Estructuras de Control
Funciones en PHP
Inclusión de código
Matrices (array)
Cadenas de Caracteres
Clases
Fechas
Entrada y Salida
Operaciones con Ficheros
El lenguaje SQL y PHP
Conexión con MySQL
Sesiones
Formularios con PHP
Practicar en línea
Lista de prácticas en línea
FAQ
Preguntas frecuentes
Códigos PHP
Lista de Códigos PHP
Foros
Foros PHP
Otros Manuales
Manuales de otros lenguajes
 
   
 
 
Alojamiento web en Hostalia