Foros del Web » Programando para Internet » PHP »

Proteger fichero

Estas en el tema de Proteger fichero en el foro de PHP en Foros del Web. Hola a todos: Mi cuestión es la siguiente. Tengo en mi sitio web un conjunto de ficheros que deseo los usuarios se descarguen previa acreditación. ...
  #1 (permalink)  
Antiguo 02/12/2005, 03:06
 
Fecha de Ingreso: julio-2003
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 0
Mensaje Proteger fichero

Hola a todos:
Mi cuestión es la siguiente. Tengo en mi sitio web un conjunto de ficheros que deseo los usuarios se descarguen previa acreditación. Todo ok, pero claro si alguien me solicita la url del recurso (del fichero en este caso) directamente se salta el proceso.
Estaba pensando en resolverlo concediendo permiso de lectura solamente al PHP.
Veamos si deniego el permiso de lectura publico no puedo acceder tampoco via PHP.
¿Alguien sabe como debo configurar los permisos en este escenario?

Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 02/12/2005, 04:01
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
con un .htaccess en apache? no te sería válido?

Un saludo.
__________________
www.pensandoenred.com
  #3 (permalink)  
Antiguo 03/12/2005, 09:40
 
Fecha de Ingreso: julio-2003
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 0
Mensaje .htaccess

Hola de nuevo:
No veo la posibilidad en el .htaccess de denegar que si alguien excribe la url en el navegador esta se inicie automaticamente. Las soluciones que veo contemplan la referencia de donde viene la navegación y eso esta bien para que nadie te ponga un link a tus recursos. Pero si alguien escribe la url en el navegador ¿Como debe especificarle al .htaccess que no inicie la descarga?

Gracias de nuevo
  #4 (permalink)  
Antiguo 03/12/2005, 11:41
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 8 meses
Puntos: 0
Hola,

Tal vez si a este sistema: http://shockly.com/demo_downloads/ le implementas tu validación para descarga, te resuelva el asunto.

Un saludo.


El 'index.php':
Código PHP:
<?php
/*
        03/12/2005
*/
//------------------------------------------------------------------------------------------
//  Definiciones

    
error_reportingE_ALL ^ (E_NOTICE E_WARNING) );

//------------------------------------------------------------------------------------------
//  main

    
echo"<html>\n\r";
    echo
"<head>\n\r";
    echo
"    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n\r";
    echo
"<style type=\"text/css\"><!--\n\r";
    echo
".small { font: 11px verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; }\n\r";
    echo
"--></style>\n\r";
    echo
"    <title>demo</title>\n\r";
    echo
"    <!-- no cache headers -->\n\r";
    echo
"    <meta http-equiv=\"Pragma\" content=\"no-cache\">\n\r";
    echo
"    <meta http-equiv=\"no-cache\">\n\r";
    echo
"    <meta http-equiv=\"Cache-Control\" content=\"no-cache\">\n\r";
    echo
"    <meta http-equiv=\"Expires\" content=\"0\">\n\r";
    echo
"    <!-- end no cache headers -->\n\r";
    echo
"    <meta http-equiv=\"MSThemeCompatible\" content=\"Yes\">\n\r";
    echo
"    <link rel=\"SHORTCUT ICON\" href=\"favicon.ico\"> \n\r";
    echo
"</head>\n\r";
    echo
"<BODY bgcolor=\"#D5D5D5\" text=\"#000000\" id=\"all\" leftmargin=\"10\" topmargin=\"10\" marginwidth=\"10\" marginheight=\"10\" link=\"#000020\" vlink=\"#000020\" alink=\"#000020\">\n\r";
    echo
"<P><H1><CENTER>demo</CENTER></H1></P>\n\r";
    echo
"<BR>\n\r";
    echo
"<LI class=\"small\"><a href=\"../\">Volver</a></LI>\n\r";
    echo
"<HR>\n\r";
    echo
"<PRE>\n\r";

    echo
"  <IMG SRC=\"mp3.gif\" ALT=\"[TXT]\"> <A HREF=\"download.php?f=01\">Mike Curb Congregation - Burning Bridges.mp3</A>                 2.5 Mb       (02:43)\n";
    echo
"  <IMG SRC=\"zip.gif\" ALT=\"[TXT]\"> <A HREF=\"download.php?f=02\">sources_demo_downloads.zip</A>                                   2.3 Kb\n";

    echo
"</PRE><HR>\n\r";
    echo( 
"<center><small>" );
    echo 
'o0o<br>';
    echo( 
"</small></center>" );
    echo( 
"</BODY>" );
    echo( 
"</html>" );

//------------------------------------------------------------------------------------------
//  end
?>
El 'download.php':
Código PHP:
<?php
/*
        03/12/2005
*/
//------------------------------------------------------------------------------------------
//  Definiciones

    
error_reportingE_ALL ^ (E_NOTICE E_WARNING) );

//------------------------------------------------------------------------------------------
//  main

    
$filename_real  "";
    
$filename_en_disco "";
    if( isset(
$_GET['f']) ) {
        
$source_file $_GET['f'];
        if( 
$source_file != '' ) {
            switch ( 
$source_file ) {
                case 
1:
                    
$filename_real          "Mike Curb Congregation - Burning Bridges.mp3";
                    
$filename_en_disco     "123456789_abcdefghijklmnopqrstuvwxyz";
                    break;
                case 
2:
                    
$filename_real          "sources_demo_downloads.zip";
                    
$filename_en_disco     "xxx456xxx_abcdefghijklmnopqrstuvwxyz";
                    break;
                default:
                    break;
            }
        }
    }

    
//  -----------------------------------------------------
    //  Insertar aquí la validación del usuario para descarga
            
            
$is_valid_user true;
    
//  -----------------------------------------------------

    
if( $filename_real != "" AND $filename_en_disco != "" ) {
        if( !
file_exists($filename_en_disco) ) {
            
$filename_en_disco "";
        }
    }    
    
    if( 
$is_valid_user && $filename_real != "" && $filename_en_disco != "" ) {

        
$filetime filectime($filename_en_disco);
        
$filesize filesize($filename_en_disco);
        
$fp fopen$filename_en_disco"rb" );
        
$filedata fread($fp$filesize);
        
fclose($fp);
        
        
header("Cache-control: max-age=31536000");
        
header("Expires: " gmdate("D, d M Y H:i:s",time()+31536000) . " GMT");
        
header("Last-Modified: " gmdate("D, d M Y H:i:s",$filetime) . " GMT");
        
header("Content-disposition: attachment; filename=\"$filename_real\"\n\n");
        
header("Content-Length: $filesize");
        
$extension=strtolower(substr(strrchr($filename_real,"."),1));
    
        if (
$extension=='gif') {
          
header('Content-type: image/gif');
        } elseif (
$extension=='jpg' or $extension=='jpeg') {
          
header('Content-type: image/jpeg');
        } elseif (
$extension=='png') {
          
header('Content-type: image/png');
        } elseif (
$extension=='pdf') {
          
header('Content-type: application/pdf');
        } elseif (
$extension=='mp3') {
          
header('Content-type: audio/mpeg');
        } else {
          
header('Content-type: unknown/unknown');
        }
        echo 
$filedata;
    }
    else {
        ;
    }

//------------------------------------------------------------------------------------------
//  end
?>
  #5 (permalink)  
Antiguo 03/12/2005, 14:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por LastN
Hola de nuevo:
No veo la posibilidad en el .htaccess de denegar que si alguien excribe la url en el navegador esta se inicie automaticamente. Las soluciones que veo contemplan la referencia de donde viene la navegación y eso esta bien para que nadie te ponga un link a tus recursos. Pero si alguien escribe la url en el navegador ¿Como debe especificarle al .htaccess que no inicie la descarga?

Gracias de nuevo
La solución que te plantean es que se usaría Autentificación HTTP .. contraldo por un .htacces y un .htpasswd (si es que usas Apache como servidor HTTP en tus servidores y dispones de esa posibilidad).

http://www.maestrosdelweb.com/editorial/proteger/

Eso protegería sin muchos esfuerzos un directorio completo .. Desde PHP puedes usar autentificación HTTP también:

http://www.phpbuilder.com/manual2/ma....http-auth.php

Por supuesto .. hay mejores formas o más versátiles de administrar usuarios, por ejemplo usando sesiones para la autentificación de tu usuario y forzar la descarga del archivo (como el ejemplo anterior de "donwload.php" en la parte de los header())

Sistemas de estos ya implementados tienes en:
http://www.hotscripts.com/PHP/Script...ems/index.html

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 10:39.