Używam wordpress na prywatnej stronie, na której użytkownicy przesyłają pliki. Używam „Prywatnego WordPressa”, aby uniemożliwić dostęp do strony, jeśli użytkownik nie jest zalogowany.
Chciałbym zrobić to samo z plikami przesłanymi w folderze uploads.
Jeśli więc użytkownik nie jest zalogowany, nie będzie mógł uzyskać dostępu do: https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf, jeśli spróbuje uzyskać dostęp, ale nie jest zalogowany, powinien zostać przekierowanym na przykład na stronę logowania.
Znalazłem wtyczkę o nazwie prywatne pliki, ale ostatnia aktualizacja została przeprowadzona w 2009 roku i wydaje się, że nie działa na moim wordpress.
Czy ktoś zna jakąś metodę? Czy metoda Hotlinking wystarczy, aby to chronić?
Znalazłem również tę metodę:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*uploads/private/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /index.php [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Ale czy jakikolwiek użytkownik, który replikuje plik cookie, może przekazać to prawo? pozdrowienia
źródło
Odpowiedzi:
Tylko sprawdzenie, czy plik cookie istnieje, nie stanowi ścisłej ochrony.
Aby uzyskać lepszą ochronę, możesz przekazać lub „proxy” wszystkie żądania do przesłanego folderu (przykład
uploads
w poniższym przykładzie) za pomocą skryptu php:Wszystkie prośby o przesłanie plików (które zawierają obrazy w postach) byłyby kierowane do tych,
dl-file.php
które mogłyby następnie zweryfikować, czy użytkownik jest zalogowany, czy nie.Jeśli użytkownik nie jest zalogowany, zostanie wyświetlony formularz logowania do witryn. Po zalogowaniu się użytkownik zostanie przekierowany z powrotem do pliku i może go teraz pobrać.
Wzorowe
dl-file.php
.Coś podobnego można znaleźć w
\wp-includes\ms-files.php
instalacji wordpress, ale ta jest przeznaczona dla wielu witryn i bez sprawdzania logowania i przekierowań.W zależności od tego, jak dużo ruchu masz, to może być mądry, aby lepiej zintegrować to z Twojego serwera, np
X-Accel-Redirect
lubX-Sendfile
nagłówków.źródło
Możesz także napisać wtyczkę używając
init
hooka i get-value$_GET[ 'file' ];
. Jeśli użytkownik ma tę wartość „get”, wskocz do funkcji, aby sprawdzić prawa dostępu do plików: Na przykład z polem wyboru w polu Meta Box.funkcja get_file ()
Możesz także dodać niestandardowy adres URL plików za pomocą haka
generate_rewrite_rules
źródło
Jeśli chcesz zastosować podejście oparte na wtyczkach do rozwiązania tego problemu, oto dość dobre rozwiązanie, które (w końcu) znalazłem:
https://wordpress.org/plugins/download-monitor/
/wp-content/uploads/dlm_uploads/
Oznacza to, że nikt niezalogowany nie może pobrać pliku ani zobaczyć rzeczywistego adresu URL pliku. Jeśli w przypadku, gdy ktoś nieautoryzowany obliczy adres URL pliku, wtyczka przerwie także przeglądanie adresu URL rzeczywistego pliku przez zablokowanie dostępu do
/wp-content/uploads/dlm_uploads/
folderu.Bonus: jeśli robisz to dla witryny, w której potrzebujesz, aby użytkownicy mogli logować się tylko jako „Członkowie” (ale nie mają uprawnień WordPress, takich jak edycja strony lub bycie administratorem), zainstaluj wtyczkę „Członkowie” https: // wordpress .org / plugins / Members / , utwórz nową rolę użytkownika o nazwie „Członek” i nadaj jej pojedynczą funkcję „odczytu”, utwórz nowego Użytkownika w WordPress i upewnij się, że nadasz im rolę „Członek”.
Jeśli chcesz chronić zawartość stron, wtyczka „Members” zapewnia pewne opcje lub istnieją inne wtyczki. Jeśli chcesz utworzyć motyw strony logowania, aby członkowie wyglądali lepiej niż domyślny formularz logowania WordPress, użyj czegoś takiego jak „Theme My Login”: https://wordpress.org/plugins/theme-my-login/
źródło