Proteger
Descargas
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.
Fuente: programacionweb.net
|