forzare download e negare il download dei .php

Ciao a tutti,

mi trovo davanti ad un insolito problema:

utilizzo uno script per forzare il download dei file pdf (insomma evito di farli aprire dal browser, obbligando a scaricare il file

<?
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=$_REQUEST['fileToDownload'];
forceDownload($myFile);
?>

la cosa insolita è che se punto ad un file.php riesco a scaricarlo tranquilamente!! 

Dove posso specificare le estenzioni per le quali è consentita la forzatura del download(pdf,txt)?

grazie mille

inviato 10 anni fa
yusizu
X 0 X

Non so se ti servirà, comunque...se il file che vuoi venga scaricato lo includi in un file zip verrà scaricato 100 volte su 100.

P.S. Puoi anche zipparlo "al volo"

risposto 10 anni fa
usecram
X 0 X

ti ringrazio per il suggerimento ma l'inserimento dei file non è ad opera mia bensì degli utenti del portale...che ovviamente caricano di tutto di più.

....proprio per evitare di far aprire un pdf di 4Mb che blocchi il pc avevo pensato ad una soluzione simile ma che ha questo grosso bug!

 :bye:

risposto 10 anni fa
yusizu
X 0 X

Grazie cmq ho risolto così:

<?
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);




If($filename.='.'.php){
header("Location:index.php");                                    //oppure un echo"error"
exit;
}






      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=$_REQUEST['fileToDownload'];
forceDownload($myFile);
?>

 :bye:

risposto 10 anni fa
yusizu
X 0 X
risposto 10 anni fa
Lore
Lore
1
modificato 10 anni fa
X 0 X

grazie cmq lore ma mi sono impuntato con questo script!

nel codice del post precedente c'è un errore..

così funziona:

<?
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];
                      $php .= '.'.$parsename[$last];
If($php ==".php"){                        //
$refe=$_SERVER['HTTP_REFERER'];  //se è un file.php rimanda alla pagina precedente
header("Location:$refe");              //
exit;
}
      }
      $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=$_REQUEST['fileToDownload'];
forceDownload($myFile);
?>

 :bye:

risposto 10 anni fa
yusizu
X 0 X

Ma non bastava zippare quello che gli utenti caricano sul server? Magari controllando che siano veramente PDF prima?

Comunque converti questo If($php ==".php"){  in If(strtolower($php) ===".php"){  in quanto non puoi essere sicuro di come è scritto, quindi converti tutto in minuscolo o in maiuscolo fai tu.

risposto 10 anni fa
Marco Grazia
X 0 X

grazie cmq lore ma mi sono impuntato con questo script!

nel codice del post precedente c'è un errore..

....

 :bye:

Di niente...è solo che ti avevo postato lo script completo...che è lo stesso che hai usato tu credo...

va bhe...se ora funzione sei a posto  ;)

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Ottimo Marcolino, grazie mille per la precisazione.

risposto 10 anni fa
yusizu
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda