Limitare l'accesso ai file all'interno di una cartella specifica

12 gen 2011, 05:57:54
Visualizzazioni: 16.5K
Voti: 2

Possibile duplicato:
Come proteggere gli upload se l'utente non è loggato?

Esiste un modo per limitare l'accesso diretto ai file all'interno di una cartella specifica solo a determinati utenti WordPress che hanno una specifica capacità impostata?

2
Commenti

Limitare l'accesso a specifici file PHP in una directory? O a TUTTI i file in una directory?

MathSmath MathSmath
12 gen 2011 06:26:54

Limitare l'accesso a tutti i file all'interno di una specifica directory dall'accesso diretto a tutti, TRANNE quegli utenti che hanno quella specifica capacità.

NetConstructor.com NetConstructor.com
14 gen 2011 09:24:48
Tutte le risposte alla domanda 1
1

La soluzione PHP più semplice sarebbe creare uno script di download. Verifica se l'utente ha i permessi corretti e invia il file al client web. Oppure, la mia preferenza, configura una cartella al di fuori della root web e posiziona i file lì.

Imposta i permessi del file senza accesso anonimo e lascia che il server web li legga e li restituisca in un file PHP come questo. Il codice seguente legge il file e lo invia al browser.

header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header('Content-disposition: attachment; filename='. $file;
header("Content-Transfer-Encoding:  binary"); 
header("Content-Length: ". filesize(ABSPATH.$dir.$file); 
readfile($dir.$file);
exit();

modifica 14-1:

crea un normale box di upload e quando il file viene caricato spostalo in una cartella al di fuori della directory webroot (questa cartella non può essere accessibile dagli utenti via http, solo dal server web).

if (move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $upload_dir.$filename ) ) {
// codice da eseguire dopo che il file è stato copiato con successo. Aggiorna il tuo database o altro.
}

$upload_dir.$filename è il percorso completo alla directory al di fuori della cartella www. Il file ora può essere accessibile solo dal server web. Memorizza la posizione in un database con le informazioni di chi ha caricato il file. Oppure crea sottodirectory per ogni utente. Hai bisogno di qualcosa per differenziare i file per ogni utente.

Ora quando vuoi scaricare un file crea uno script chiamato download.php In quello script verifichi se l'utente ha i diritti per il file.

global $user;
if ($user->id == $uploaded_user_id) {
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false); 
    header('Content-disposition: attachment; filename='. $file;
    header("Content-Transfer-Encoding:  binary"); 
    header("Content-Length: ". filesize(ABSPATH.$upload_dir.$file); 
    readfile($upload_dir.$file);
    exit();

}

ora vuoi passare un file_id o nome allo script di download. quindi crea il link come url/download.php?file=$file. Devi chiamarlo direttamente o nelle prime fasi del tuo plugin altrimenti otterrai il messaggio headers already sent. Lo script verificherà se l'utente ha i diritti e inizierà a inviare i dati binari.

Dovrebbe essere qualcosa del genere, spero sia d'aiuto. Non è completo ma dovrebbe darti un punto di partenza.

12 gen 2011 10:45:31
Commenti

grazie mille per la tua risposta. Apprezzerei molto se potessi espandere la tua risposta. Vedi, quello che vorrei fare è creare un metabox personalizzato per il caricamento che carichi i file in una cartella specifica sul server. Poi vorrei limitare l'accesso diretto a quei file da parte del pubblico a tutti i visitatori del sito, eccetto per quegli utenti che hanno effettuato l'accesso e hanno la specifica capacità di visualizzare tutti questi file. Quale pensi sia il modo migliore per realizzare questo?

NetConstructor.com NetConstructor.com
14 gen 2011 09:26:39