[PHP-it] sicurezza download
Gianluca Baù
gianluca at ihuri.it
Thu Jan 4 18:10:53 CET 2007
> Jonathan Stoppani ha scritto:
>
>> Al momento dell'upload salvi il file in una directory non accessibile
>> dal web (se non puoi, puoi sempre dargli un nome che è un qualche
>> hash md5 o sha1 e salvi la corrispondenza nel db), poi tramite mod
>> rewrite reindirizzi tutte le richieste a download.php (per esempio)
>> che va a leggere l'url (e pesca il file con la corrispondenza
>> dell'hash nel db, oppure dalla cartella non accessibile) e dopo gli
>> opportuni controlli di login/permessi ecc lo passa all'output buffer
>> con gli header corretti. ;)
>
> soluzione 1: l'hosting mi permette di usare directory non accessibili
> da web, e uso un codice di questo tipo:
> file forceDownload.php
> <?
> function forceDownload( &$file ) {
> if( file_exists( $file ) == true && is_readable( $file ) == true ) {
> $filename = &basename( $file );
> if( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false ) {
> $parsename = &explode( '.', $filename );
Perchè &basename ? Stesso per &explode ?
> $last = count( $parsename ) - 1;
> $filename = &implode( '%2E', array_slice( $parsename, 0, $last ) );
> $filename .= '.'.$parsename[$last];
> }
> $content = &file_get_contents( $file );
Perchè &file_get_contents ?
> header( 'Content-Type: application/octet-stream' );
> header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
> header( 'Content-Length:'.strlen( $content ) );
> header( 'Content-Transfer-Encoding: binary' );
> echo $content;
> exit(0);
> }
> }
> $myFile = $_GET['nome_file'];
> forceDownload( $myFile );
> ?>
>
> e faccio partire il tutto con:
> getURL("forceDownload.php?nome_file="+nomefile, "_self");
>
> soluzione 2: l'hosting non mi permette di avere directory non
> accedibili da web, e devo usare una dir con hash ecorrispondenza db
>
> la seconda soluzione però mi pone una domanda (sono in paranoic mode),
> si riesce a risalire in qualche maniera all'URL assoluto? perchè se si
> riesce si è punto e a capo! mentre con la prima non si riesce!
>
> ciauz
> Francesco
Insomma perchè tutto per riferimento ? Perchè è questo che intende la &
giusto ?
Saluti,
Gianluca
More information about the Php-it
mailing list