[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