[PHP-it] sicurezza download

Mailinglist - Francesco Reitano mailinglist at francescoreitano.it
Thu Jan 4 18:05:35 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 );
$last = count( $parsename ) - 1;
$filename = &implode( '%2E', array_slice( $parsename, 0, $last ) );
$filename .= '.'.$parsename[$last];
}
$content = &file_get_contents( $file );
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



More information about the Php-it mailing list