Soluzione semplice per limitare l'accesso a (alcuni) upload/download
Situazione iniziale
Per un sito che sto configurando, stavo esaminando il campo della sicurezza per gli upload/download e della limitazione dell'accesso in base ai ruoli/permessi degli utenti. Naturalmente ho letto alcune delle domande precedenti relative all'argomento (generale) qui, per riferimento le più importanti/interessanti che ho trovato:
- Come proteggere gli upload se l'utente non è loggato?
- Come limitare l'accesso ai file caricati?
- Limitare l'accesso ai file in una cartella specifica
- Come rendere privati i media upload?
- Integrare uno script PHP per il download in `functions.php`
Note supplementari
Generalmente non è una cattiva idea migliorare ulteriormente la sicurezza della tua installazione WordPress - ad esempio proteggendo il tuo wp-config.php
- ci sono molte cose che puoi e dovresti fare. Ci sono tantissime informazioni su come farlo. Nel contesto di questa domanda sono principalmente interessato ai miei upload/download.
Gli upload di WordPress non sono protetti, chiunque può sfogliare la cartella uploads
, a meno che non lo previeni con un .htaccess
:
Options All -Indexes
Il file .htaccess
deve essere posizionato all'interno della cartella uploads
. Ma questo non le protegge veramente, rende solo più difficile trovare i file. Inoltre puoi prevenire il hotlinking
, limitando essenzialmente l'accesso in base al referrer
- sebbene sia un caso leggermente diverso ho pensato di menzionarlo, non approfondirò ulteriormente, puoi trovare molte informazioni al riguardo.
Ovviamente c'è la possibilità di rendere i post privati o creare un custom post type con template adatti per renderlo privato, ma questo non protegge i tuoi file. Lo stesso vale per il wrapping dei file in condizionali come is_user_logged_in()
o is_admin()
.
Come nota a margine ci sono molti plugin che promettono di rendere i tuoi file sicuri e protetti, ma molti di loro fingono solo di farlo, alcune delle ragioni sono sopra. Lo segnalo perché sono abbastanza sicuro che non sia noto a tutti - quindi, attenzione.
Obiettivo
La mia intenzione era poter limitare l'accesso ad (alcuni) upload e rispettivamente download. E assicurarmi che nessuno indesiderato potesse accedervi, non per caso o se qualcuno conoscesse il nome del file, i file dovevano essere veramente privati e sicuri. In definitiva solo alcune persone specifiche dovrebbero avere accesso senza eccezioni.
Inoltre non avevo bisogno di privatizzare l'intero sito, anzi sarebbe stato controproducente - è usato per scopi di presentazione pubblica. Inoltre volevo che la soluzione fosse facilmente utilizzabile, per il semplice motivo che alcune delle persone che ci lavorano non sono esattamente esperti di computer, come spesso accade.
Domanda
Quindi la domanda: c'è un modo (relativamente) semplice per limitare l'accesso ad (alcuni) upload e i rispettivi download? E come ho spiegato, significa un modo per proteggerli e renderli sicuri veramente?

Rispondo qui alla mia domanda perché ho trovato una soluzione, ma sono davvero interessato alle vostre opinioni al riguardo. O forse avete una soluzione molto migliore, in tal caso, mi piacerebbe davvero sentirne parlare.
Risultati della ricerca
I risultati della mia ricerca sono stati:
1. posizionare i file al di fuori della root del documento, cartella www
;
2. impedire qualsiasi accesso diretto alla cartella contenente i file;
3. far gestire le richieste dei file da uno script;
Le fonti per questi punti sono - almeno in gran parte - incluse nella mia domanda.
Soluzione
- Ho installato il plugin »wp-downloadmanager«
- nel processo viene creata una cartella chiamata
files
all'interno diwp-content
;
- nel processo viene creata una cartella chiamata
- Ho aggiunto un file
.htaccess
alla nuova cartellafiles
:- contenuto del
.htaccess
:
Options All -Indexes
Order Deny,Allow
Deny from all
- contenuto del
- Ho modificato un'opzione importante del plugin:
- l'opzione a cui mi riferisco è
metodo di download
; - l'ho cambiata in
output file
;
- l'opzione a cui mi riferisco è
- Ho aggiunto alcuni file tramite l'interfaccia del plugin:
- c'è un'opzione chiamata
consentito il download
; - che permette di limitare l'accesso in base al ruolo/capacità dell'utente;
- c'è un'opzione chiamata
- Ho effettuato alcuni test:
- nessun accesso diretto ai file - né tramite barra degli indirizzi né con wget;
- i download pubblici sono raggiungibili tramite i loro permalink - ho scelto »permalink gradevoli: sì« e »url di download: id file« nel pannello delle opzioni - funziona anche tramite barra degli indirizzi/wget;
- i download protetti e limitati sono accessibili solo se si è loggati come utente con i ruoli/capacità corretti;
Considerazioni conclusive
Penso che la soluzione segua abbastanza i risultati della ricerca. A parte il posizionamento dei file all'esterno. Ma la restrizione dell'accesso a/protezione della directory e la gestione delle richieste dei file da parte di uno script sono soddisfatte. La restrizione dell'accesso è gestita dal .htaccess
e lo script in questo caso è il plugin wp-downloadmanger
.
Note supplementari
- è assolutamente necessario cambiare il
metodo di download
inoutput file
e ovviamente è un must che il file
.htaccess
sia presenteper verificare che il plugin assuma il ruolo dello script date un'occhiata a
wp-downloadmanger.php
- circa dalle righe 207 a 227 (versione 1.6.1); questo è inteso come punto complementare alle informazioni collegate
