Cum să restricționezi accesul la fișierele încărcate?
Am o zonă restricționată pe un site web care poate fi accesată doar de utilizatorii autentificați. Pentru aceasta am creat un șablon de pagină cu o condiție 'current_user_can()'.
Problema mea este că documentele atașate paginilor restricționate sunt încă accesibile oricui dacă se introduce calea completă în bara de adrese a browserului.
Există vreo modalitate de a restricționa accesul la fișierele încărcate?
EDIT: Vreau să clarific, fișierele ar trebui să fie accesibile doar utilizatorilor autentificați.

Aceasta nu este chiar o întrebare specifică WordPress - dar poți adăuga o regulă de rescriere pentru a preveni accesul decât dacă referința este din propriul domeniu.
[Actualizare]
Va trebui să faci 2 lucruri:
Adaugă o regulă de rescrire (fie direct cu .htaccess sau folosind WP_rewrite (referință Codex). Scopul aici este de a refuza cererile către documentele tale care nu au domeniul tău ca referință - acest lucru oprește oamenii să introducă linkul direct în bara de adrese a browserului
Învelește linkurile de descărcare într-un bloc condițional
is_user_logged_in
(referință Codex) - în acest fel ele vor apărea pe pagină doar dacă utilizatorul este autentificat
Un exemplu de cod este disponibil într-o întrebare similară:

Salut anu, referitorul trebuie să fie domeniul meu + vizitatorul trebuie să fie un utilizator înregistrat și conectat. Cred că este o problemă legată de WordPress.

Salut anu, da, asta nu afișează fișierele dacă un utilizator nu este autentificat, dar dacă un utilizator ghicește numele fișierului? El poate totuși să acceseze fișierul! Și asta vreau să evit. Să-ți dau un exemplu, să zicem că avem un site corporate cu unele documente publice (report2011.pdf, report2010.pdf, etc.) și unele documente private (report2009.pdf, report2008.pdf). Chiar dacă documentele private nu sunt afișate pe site-ul public, cineva ar putea să ghicească ușor unele nume de fișiere (pe baza structurii celor publice) și astfel să acceseze documentele private doar tastând URL-ul în bara de adrese.

Va funcționa dacă nu am un domeniu ca atare... Adică accesez blogul meu prin adresa IP?

Două cuvinte: falsificare referer. Soluția ta nu e decât o 'securitate prin obscuritate': Atacatorul nu poate accesa fișierul media dacă știe URL-ul complet către el. În schimb, acum trebuie să cunoască unul dintre URL-urile referer valide. Ce am câștigat în schimbul unei complexități administrative mai mari? IMHO nimic. La momentul scrierii acestui text, există "mii" de plugin-uri pentru protejarea paginilor și articolelor, dar Wordpress încă nu are o protecție utilă pentru fișierele media. Dezvoltatorii Wordpress (și ai plugin-urilor) evită acest subiect, pentru că știu care sunt consecințele.

Puteți folosi protecția împotriva hot-linking-ului folosind serverul web de alegere.
Consultați acest răspuns de pe StackOverflow:
https://stackoverflow.com/questions/1775582/apache-hotlink-protection-for-download-folder.
Aceasta utilizează fișierul .htaccess din Apache2.
În esență, se interzice descărcarea, dacă utilizatorul nu vine de pe o pagină a blogului dvs.!

Aceasta soluție a funcționat pentru mine. Poți împiedica accesul la folderul wp-content/upload (excluzând utilizatorii autentificați) prin crearea unui fișier .htaccess și adăugarea următoarei reguli de rescriere:
# Dezactivează navigarea în directoare
Options -Indexes
# Redirecționează utilizatorii neautentificați către pagina de login
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule \.(pdf|jpg)$ /wp-login.php [L,R=302]

Plugin-ul pentru utilizatorii înregistrați are rolul de a se asigura că un vizitator este autentificat înainte de a vizualiza conținutul paginii tale. Accesul la fișierele tale prin intermediul unui browser este controlat de server.
Ar trebui să încerci plugin-ul WP AskApache Password Protect - http://wordpress.org/extend/plugins/askapache-password-protect/
Desigur, acest lucru va funcționa doar dacă blogul tău WordPress este găzduit pe un server Apache.
