Ich benutze WordPress für eine private Site, auf der Benutzer Dateien hochladen. Ich verwende "Private WordPress", um den Zugriff auf die Site zu verhindern, wenn der Benutzer nicht angemeldet ist.
Ich möchte dasselbe mit den Dateien machen, die im Upload-Ordner hochgeladen wurden.
Wenn ein Benutzer also nicht angemeldet ist, kann er nicht auf Folgendes zugreifen: https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf. Wenn er versucht, darauf zuzugreifen, aber nicht angemeldet ist, sollte er dies tun Sie werden beispielsweise zur Anmeldeseite weitergeleitet.
Ich habe ein Plugin namens private files gefunden, aber das letzte Update war 2009 und es scheint nicht auf meinem WordPress zu funktionieren.
Kennt jemand eine Methode? Hotlinking-Methode wird ausreichen, um dies zu schützen?
Ich habe auch diese Methode gefunden:
# 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
Aber dann könnte jeder Benutzer, der das Cookie repliziert, dieses Recht bestehen? Grüße
quelle
Antworten:
Nur zu prüfen, ob das Cookie existiert, ist kein strenger Schutz.
Um einen stärkeren Schutz zu erhalten, können Sie alle Anforderungen an den hochgeladenen Ordner (
uploads
im folgenden Beispiel beispielhaft) über ein PHP-Skript übergeben oder "vertreten" :Alle Anfragen an hochgeladene Dateien (die Bilder in Posts enthalten) gehen an
dl-file.php
die dann überprüfen kann, ob der Benutzer angemeldet ist oder nicht.Wenn der Benutzer nicht angemeldet ist, wird das Anmeldeformular Ihrer Site angezeigt. Nachdem sich der Benutzer angemeldet hat, wird er zurück in die Datei geleitet und kann diese jetzt herunterladen.
Vorbildlich
dl-file.php
.Ähnliches finden Sie in
\wp-includes\ms-files.php
Ihrer WordPress-Installation, jedoch für Multisite-Anwendungen ohne Login-Prüfung und Weiterleitung.Je nachdem , wie viel Verkehr Sie haben, könnte es klug sein , dies zu einer besseren Integration mit Ihrem Server, zB
X-Accel-Redirect
oderX-Sendfile
Header.quelle
Sie können ein Plugin auch mit dem
init
Hook und dem get-value schreiben$_GET[ 'file' ];
. Wenn der Benutzer diesen get-Wert hat, springen Sie in eine Funktion, um die Zugriffsrechte für die Dateien zu überprüfen: Zum Beispiel mit einem Kontrollkästchen in einer Meta-Box.die Funktion get_file ()
Sie können auch eine benutzerdefinierte URL für Dateien über den Hook hinzufügen
generate_rewrite_rules
quelle
Wenn Sie einen Plug-in-basierten Ansatz zur Lösung dieses Problems wünschen, finden Sie hier eine einigermaßen gute Lösung, die ich (endlich) gefunden habe:
https://wordpress.org/plugins/download-monitor/
/wp-content/uploads/dlm_uploads/
Dies bedeutet, dass jeder, der nicht angemeldet ist, die Datei weder herunterladen noch die tatsächliche URL der Datei anzeigen kann. Falls jemand die URL der Datei nicht kennt, stoppt das Plugin auch das Surfen der Benutzer zur URL der realen Datei, indem der Zugriff auf den
/wp-content/uploads/dlm_uploads/
Ordner gesperrt wird.Bonus: Wenn Sie dies für eine Site tun, auf der sich Benutzer nur als "Mitglieder" anmelden dürfen (aber keine WordPress-Berechtigungen wie zum Beispiel zum Bearbeiten von Seiten oder als Administrator haben), installieren Sie das Plugin "Mitglieder" https: // wordpress .org / plugins / members / , erstelle eine neue Benutzerrolle mit dem Namen 'Member' und gib ihr die einmalige Funktion 'Lesen', erstelle einen neuen Benutzer in WordPress und stelle sicher, dass du ihnen die Rolle 'Member' gibst.
Wenn Sie den Inhalt von Seiten schützen möchten, bietet das Plugin "Mitglieder" einige Optionen oder es gibt andere Plugins. Wenn Sie möchten, dass die Anmeldeseite für Mitglieder besser aussieht als das WordPress-Standard-Anmeldeformular, verwenden Sie etwas wie "Meine Anmeldung": https://wordpress.org/plugins/theme-my-login/
quelle