Soluție simplă pentru restricționarea accesului la (anumite) încărcări/descărcări
Situația inițială
Pentru un site pe care îl configurez, am căutat soluții pentru a securiza încărcările/descărcările și pentru a restricționa accesul la ele în funcție de rolurile/capacitățile utilizatorilor. Desigur, am citit câteva dintre întrebările anterioare legate de acest subiect (în general) de pe acest site, iar pentru referință, cele mai importante/interesante pe care le-am găsit sunt:
- Cum să protejez fișierele încărcate dacă utilizatorul nu este autentificat?
- Cum să restrâng accesul la fișierele încărcate?
- Restricționarea accesului la fișiere dintr-un anumit folder
- Cum să fac media încărcată privată?
- Integrarea unui script PHP de descărcare în `functions.php`
Note suplimentare
În general, nu este o idee rea să îmbunătățești securitatea instalației tale WordPress - de exemplu, protejând fișierul wp-config.php
- există multe lucruri pe care le poți și ar trebui să le faci. Există o tonă de informații despre cum să faci asta. În contextul acestei întrebări, sunt mai preocupat de încărcările/descărcările mele.
Fișierele încărcate în WordPress nu sunt securizate, oricine poate naviga în folderul uploads
, decât dacă îl previți cu un fișier .htaccess
:
Options All -Indexes
Fișierul .htaccess
trebuie plasat în interiorul folderului uploads
. Dar asta nu le securizează cu adevărat, ci doar face mai greu găsirea fișierelor. În plus, poți preveni hotlinking-ul
, restricționând esențial accesul pe baza referrer-ului
- deși acesta este un caz puțin diferit, am vrut să menționez asta, nu voi elabora mai departe, poți găsi o mulțime de informații despre asta.
Desigur, există posibilitatea de a face postările private sau de a crea un tip de postare personalizată cu fișiere șablon adecvate pentru a face acel tip de postare privat, dar asta nu securizează fișierele. Același lucru se poate spune despre învelirea fișierelor în condiționale precum is_user_logged_in()
sau is_admin()
.
Pe margine, există o mulțime de plugin-uri care promit să-ți securizeze fișierele și să le protejeze, dar multe dintre ele doar pretind că fac asta, unele dintre motive sunt menționate mai sus. Menționez asta pentru că sunt sigur că nu toată lumea știe acest lucru - așadar, fii conștient de asta.
Obiectiv
Intenția mea a fost să pot restricționa accesul la (anumite) încărcări și respectiv descărcări. Și să mă asigur că nimeni nedorit nu poate avea acces la ele, nici prin noroc și nici dacă acel cineva știa numele fișierului, fișierele ar trebui să fie cu adevărat private și securizate. În final, doar anumite persoane ar trebui să aibă acces fără excepții.
În plus, nu aveam nevoie să privatizez întregul site, într-adevăr asta ar fi fost contraproductiv - este folosit pentru prezentări publice. Mai mult, am vrut ca soluția să fie ușor de utilizat, din simplul motiv că unele dintre persoanele care lucrează cu acesta nu sunt exact experți în calculatoare, așa cum se întâmplă adesea.
Întrebare
Prin urmare, întrebarea este: există o modalitate (relativ) simplă de a restricționa accesul la (anumite) încărcări și descărcările respective? Și, așa cum am expus, asta înseamnă o modalitate de a le proteja și securiza cu adevărat?

Răspund la propria întrebare, deoarece am găsit o soluție, dar sunt foarte interesat de părerile voastre despre ea. Sau poate aveți o soluție mult mai bună, dacă da, aș dori să o aud.
Rezultatele cercetării
Rezultatele cercetării mele au fost:
1. obține fișierele în afara rădăcinii documentului, folderul www
;
2. interzice orice acces direct la folderul care conține fișierele;
3. lasă un script să gestioneze cererile către fișiere;
Sursele pentru aceste puncte sunt - cel puțin în mare parte - incluse în întrebarea mea.
Soluție
- Am instalat plugin-ul »wp-downloadmanager«
- în acest proces va fi creat un folder numit
files
în interiorulwp-content
;
- în acest proces va fi creat un folder numit
- Am adăugat un fișier
.htaccess
în noul folderfiles
:- conținutul fișierului
.htaccess
:
Options All -Indexes
Order Deny,Allow
Deny from all
- conținutul fișierului
- Am schimbat o opțiune importantă a plugin-ului:
- opțiunea la care mă refer este
metoda de descărcare
; - am schimbat-o în
afișare fișier
;
- opțiunea la care mă refer este
- Am adăugat câteva fișiere prin interfața plugin-ului:
- există o opțiune numită
permis să descarce
; - care permite restricționarea accesului în funcție de rolul/capabilitățile utilizatorului;
- există o opțiune numită
- Am făcut câteva teste:
- niciun acces direct la fișiere - nici prin bara de adrese, nici prin wget;
- descărcările publice pot fi accesate prin legăturile permanente - am ales »legături permanente frumoase: da« și »URL descărcare: ID fișier« în panoul de opțiuni - bara de adrese/wget funcționează și ea;
- descărcările protejate, restricționate sunt accesibile doar dacă sunteți autentificat ca utilizator cu rolurile/capabilitățile corecte;
Gânduri finale
Cred că soluția respectă destul de mult rezultatele cercetării. Cu excepția plasării fișierelor în exterior. Dar restricționarea accesului la/protejarea directorului și lăsarea unui script să gestioneze cererile de fișiere este îndeplinită. Restricționarea accesului este gestionată de .htaccess
, iar scriptul în acest caz este plugin-ul wp-downloadmanger
.
Note suplimentare
- este absolut necesar să schimbați
metoda de descărcare
înafișare fișier
și, desigur, este obligatoriu ca fișierul
.htaccess
să fie prezentpentru a verifica faptul că plugin-ul preia rolul scriptului, aruncați o privire la
wp-downloadmanger.php
- aproximativ liniile 207 până la 227 (versiunea 1.6.1); acest lucru este menit ca punct complementar la informațiile legate
