Ich habe einen ganz bestimmten Anwendungsfall, bei dem sich die für einen Anwalt erstellte Website und jeder seiner Kunden auf einer eigenen "bestimmten Seite / einem Portal" (benutzerdefinierter Beitragstyp) anmelden kann, ohne auf wp-admin usw. zugreifen zu können (ich habe die gesamte Website erstellt) Login / Registrieren / Profilbearbeitungsseiten im Frontend). Auf dieser Seite / auf diesem Portal hinterlässt der Anwalt Nachrichten und Dateien, die der Mandant herunterladen kann. Nun kann theoretisch ein Mandant andere Dateinamen erraten (oder wenn er Kenntnis von den Dateien eines anderen Mandanten hat) und diese herunterladen, wodurch ein Problem mit dem Datenschutz / der Sicherheit entsteht / vertrauliches Material etc.
Ich bin auf der Suche nach Ideen / Konzepten für eine Lösung. Mein erster Gedanke war, den Download-Link auf eine download.php-Datei zu verweisen, die die Anhangs-ID, die Benutzer-ID, die Seiten- / Portal-ID und die Nonce-ID sendet und auf der anderen Seite diese verarbeitet. .
was denkst du? bin ich auf dem richtigen Weg oder ist dieser Ansatz fehlerhaft?
Vielen Dank!
Antworten:
Was passieren muss, ist, dass Sie Download-Anfragen für die gewünschten Dateitypen über WordPress per Proxy senden müssen. Nehmen wir an, Sie beschränken den Zugriff auf ".doc" -Dateien.
1. Definieren Sie eine Abfragevariable, die die angeforderte Datei angibt
2. Aktualisieren Sie .htaccess, um Anforderungen für eingeschränkte Dateien an WordPress weiterzuleiten
Dadurch werden Anforderungen an die Dateien erfasst, die Sie einschränken möchten, und sie werden mithilfe der oben angegebenen benutzerdefinierten Abfragevariablen an WordPress zurückgesendet. Fügen Sie die folgende Regel vor den
RewriteCond
Zeilen ein.3. Erfassen Sie den angeforderten Dateinamen in der benutzerdefinierten Abfragevariablen. und überprüfe den Zugriff auf die Datei:
NB Diese Lösung funktioniert für Single-Site installiert nur ! Dies liegt daran, dass WordPress MU bereits hochgeladene Dateianfragen in Unterseiten weiterleitet
wp-includes/ms-files.php
. Es gibt auch eine Lösung für WordPress MU, aber es ist ein bisschen komplizierter.quelle
intercept_file_request
oder dass sie irgendwo aufgerufen wird. Wie wird diese Funktion ausgelöst?wp
, ich habe das Beispiel aktualisiert.Ich habe kürzlich ein ähnliches Problem gehabt und diesen Artikel darüber geschrieben .
Ich gehe davon aus, dass die Downloads über das Media Handling von WordPress hochgeladen werden - oder Sie haben eine Anhang-ID für den Download.
Umriss der Lösung
.htaccess
Versuch, den direkten Zugriff auf Dateien im Upload-Verzeichnis (oder einem Unterverzeichnis davon) zu blockieren - z. B. übermysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Vorbehalte
.htaccess
Sicherheit . Wenn dies nicht verfügbar / aktiviert ist (z. B. Nginx-Server), erhalten Sie nicht viel Sicherheit. Sie können verhindern, dass der Benutzer das Verzeichnis uplods durchsucht . Aber der direkte Zugriff wird funktionieren.Direktzugriff sperren
Zu diesem Zweck muss sich das gesamte vertrauliche Material in Ihrem Upload-Ordner (oder einem Unterordner) in einer beliebigen Tiefe in diesem Ordner befinden. Legen Sie eine
.htaccess
Datei mit den folgenden Eigenschaften ab:Im Folgenden gehe ich davon aus, dass Sie vertrauliches Material an den Beitragstyp "Client" anhängen. Alle auf der Client-Bearbeitungsseite hochgeladenen Medien werden im
uploads/conf/
Ordner gespeichertDie Funktion zum Einrichten des geschützten Upload-Verzeichnisses
Hochladen von vertraulichem Material
Danach sollte sich der hochgeladene Inhalt in
uploads/conf
Ihrem Browser befinden und der Versuch, mit Ihrem Browser direkt darauf zuzugreifen, sollte nicht funktionieren.Herunterladen von Inhalten
Das ist einfach. Die Download-URL kann etwas sein
www.site.com?wpse26342download=5
(wobei 5 die Anhang-ID des hochgeladenen Inhalts ist). Wir verwenden dies, um den Anhang zu identifizieren, die Berechtigungen des aktuellen Benutzers zu überprüfen und ihnen das Herunterladen zu ermöglichen.Richten Sie zunächst die Abfragevariable ein
Richten Sie nun einen Listener ein, um (vielleicht) den Download auszulösen ...
Letzte Kommentare
Der obige Code kann Fehler / Syntaxfehler enthalten und ist ungetestet. Die Verwendung erfolgt auf eigenes Risiko :).
Die Download-URL kann durch Umschreiben "verschönert" werden. Wie in den Kommentaren angegeben, können Sie
index.php
in jedes untergeordnete Element des geschützten Ordners ein Leerzeichen einfügen, um das Durchsuchen zu verhindern. Dies sollte jedoch durch die.htaccess
Regeln verhindert werden.Eine sicherere Methode wäre, die öffentlichen Dateien außerhalb eines öffentlichen Verzeichnisses zu speichern. Oder über einen externen Dienst wie Amazon S3. Für letzteres müssen Sie eine gültige URL generieren, um die Datei von Amazon abzurufen (mit Ihrem privaten Schlüssel). Beides setzt ein gewisses Maß an Vertrauen in Ihren Host / Third Party Service voraus.
Ich wäre vorsichtig bei der Verwendung von Plug-Ins, die "geschützte Downloads" anbieten. Ich habe keine gefunden, die ausreichend Sicherheit bieten. Bitte beachten Sie auch die Einschränkungen dieser Lösung - und ich würde Anregungen und Kritik begrüßen.
quelle
Möglicherweise haben Sie diesen Trick gekannt. Dieser Code prüft, ob der Benutzername des aktuell angemeldeten Benutzers übereinstimmt. Wenn er übereinstimmt, wird der Download-Link zu dieser Datei angezeigt, andernfalls wird nichts angezeigt.
Hier ist der Code:
Dies ist jedoch kein guter Ansatz, da Dateien auf Servern gespeichert werden und jeder mit einem Link diese Datei herunterladen kann.
quelle
Ich gehe davon aus, dass diese Informationen vertraulich sind und dass Sie daher nicht nur die Links zu den Dateien verbergen möchten, sondern diese auch für jeden im Web unzugänglich machen möchten, selbst wenn er die URL erraten sollte, es sei denn, dieser Benutzer hat die ausdrückliche Erlaubnis zum Herunterladen die Dateien.
Überprüfen Sie, ob die Dateien auf Amazon S3 sicher gespeichert sind , und geben Sie dann vorab signierte (zeitlich begrenzte) URLs für die Datei an, sofern die korrekten Sicherheitsüberprüfungen erfüllt wurden (dh der Benutzer hat sich auf Ihrer Website angemeldet und weiß, wer er ist).
Es gibt ein sehr gutes AWS SDK , mit dem dies sehr einfach möglich ist.
Was Sie erforschen müssen, ist, wie Sie Dateien, die über die WP-Upload-Schnittstelle hochgeladen wurden, an S3 senden oder alternativ Ihren eigenen Uploader erstellen können .
Eine andere Möglichkeit wäre es, in den Code von WP E-Commerce zu schauen . Sie bieten einen sicheren Download von Software-Dateien (zB MP3s). Ich glaube, die Dateien werden mit einem Verschlüsselungsschlüssel, der pro Benutzer beim Kauf generiert wird, in Hashes umgewandelt. Dies würde eine gewisse Entschlüsselung erfordern, um zu sehen, wie es funktioniert, aber der Prozess wird nicht für dieses Plugin spezifisch sein, so dass (irgendwo) andere Beispiele verfügbar sein werden.
quelle
Ich denke, die Verschlüsselung der Dateien ist der richtige Weg, wie die obige Antwort. Auf Wordpress.org gibt es ein Plugin, mit dem Sie die Downloads schützen können. http://wordpress.org/extend/plugins/download-protect/ Sie können auch den Amazon-Dienst oder Google Drive verwenden. Es gibt viele Dienste, die geschützte Downloads anbieten, wie zum Beispiel auch Dropbox.
quelle