nascondere percorso di file da scaricare

  • Creatore Discussione Creatore Discussione turillo
  • Data di inizio Data di inizio

turillo

Utente Attivo
23 Apr 2012
47
0
0
salve a tutti, come da titolo mi servirebbe sapere come posso fare per nascondere il percorso di un file all'interno di una
directory caricata sul mio dominio. ad esempio, io ho creato un piccolo sito in cui accedendo nell'area privata posso caricare
file dentro una directory. se io volessi ad esempio poter permettere ad un utente che naviga su una pagina del sito di scaricare questo file dovrei utilizzare il percorso del tipo <a href='miodominio.com/dati/documenti/miofile.doc'>file</a> però in questo modo l'utente saprebbe la posizione delle directory sul sito. qualcuno magari mi può spiegare brevemente come posso fare? grazie!
 
Ti basterebbe creare una pagina di download, per scaricare ogni file presente nella tua directory, raggiungibile ad esempio da questo url:

w ww.tuosito../pagina_download.php?f=nome_file_da_scaricare

Il nome del file lo passi tramite url, per poi recuperarlo e forzare il download del file, qui su Mr. Webmaster c'è un tutorial che fa al caso tuo, su come forzare il downloading di file, dai un'occhiata qui:

https://www.mrw.it/php/articoli/forzare-download-file-php_963.html

C'è da dire però, che cosi l'utente se vuole, nel caso conosca la directory del file, può sempre scrivere direttamente l'url del file per scaricarlo, per evitare questo ti basterebbe negare all'utente l'accesso alla directory che contiene i file tramite un semplice regola inserita nel file .htaccess, purtroppo in questo momento non ho nessun link da postarti per mostrarti come fare.
 
Ultima modifica:
l'utente cmq non può conoscere il percorso del file, sempre che non faccia delle prove.
a questo proposito però vorrei venire ai ripari, nel senso di proteggere la cartella in questione.
io ad esempio ho un'area privata dove l'utente si logga e può fare alcune operazioni, tra queste
può caricare/eliminare file nella cartella tramite uno script che ho trovato su internet. il fatto è che
se volessi impedire l'accesso alla cartella potrei farlo impostando i permessi con chmod solo che non
mi funziona. ecco un pò l'esempio che avrei in mente

Codice:
$dir="../cartella/documenti" // cartella in cui salvo i file
...
chmod($dir,0777); imposto i permessi di lettura, scrittura, esecuzione

// eseguo lo script che mi carica il file dentro la cartella
move_uploaded_file($file, $dir.$file);


chmod($dir,0444); reimposto per sola lettura

in questo modo funzionerebbe il discorso del download forzato con la pagina download.php?
cioè quando carico il file la cartella ha i permessi per tutto, se l'utente che naviga nel sito
trova un link in una pagina deve poter scaricare il file, dopo che ho impostato le protezioni
alla cartella.

solo che ho provato ad inserire nel codice chmod($dir,0000) che non da nessun permesso
però lo script esegue lo stesso l'upload(ovviamente l'istruzione chmod è messa prima)

consigli?
 
Basta creare un file .htaccess all'interno della cartella contenente:
Codice:
Order deny,allow
Deny from all
Per il download invece crea uno script simile a questo:
PHP:
<?php
define('FILE_DIRECTORY', __DIR__ . '/uploads');

$file = isset($_GET['file']) ? trim($_GET['file']) : null;

if (null === $file) {
    header('HTTP/1.0 404 Not Found');
    exit();
}

if (!is_file($path = realpath(FILE_DIRECTORY . "/{$file}"))) {
    header('HTTP/1.0 404 Not Found');
    exit();
}

if (strpos($path, realpath(FILE_DIRECTORY)) !== 0) {
    header('HTTP/1.0 404 Not Found');
    exit();
}

header('Cache-Control: public');
header('Content-Length: '. filesize($path));
header("Content-Disposition: attachment; filename={$file}");
header('Content-Transfer-Encoding: binary');

readfile($path);
 
Ultima modifica:

Discussioni simili