Meine Komponente erstellt Rechnungen im PDF-Format, die den Kunden zum Herunterladen zur Verfügung stehen.
Wo können diese Dateien am besten gespeichert werden?
/adminitrator/componentes/com_mycomponent/invoices
/componentes/com_mycomponent/invoices
/media/com_mycomponent/invoices
Wie kann ich verhindern, dass nicht autorisierte Benutzer diese Dateien direkt herunterladen?
Wie kann ich verhindern, dass Kunden Rechnungen anderer Personen herunterladen?
quelle
id
eher den Benutzern als dem Namen zuordnen . Bei der Generierung würden Sie dann dieid
in der Tabelle mit denid
in der#__users
Tabelle vergleichen, um ihren Benutzernamen oder vollständigen Namen zu erhalten;) Insgesamt bevorzuge ich diese Methode, da sie eine Menge Serverplatz spartIch dachte nur, ich würde meine 2 Cent einwerfen (einige gute Punkte beim Hashing des Dateinamens).
Ich hatte kürzlich ein ähnliches Problem. Anstatt
.htaccess
mir Sorgen zu machen , speichere ich einfach die obigen Dateienpublic_html
mit einem Komponentenparameter, der den Pfad angibt, und verwende dann PHPsreadfile
, um die PDF-Datei abzurufen und auszugeben.Funktioniert nicht mit allen Hosts, ist jedoch für die meisten Anwendungen relativ aufwendig und verhindert jegliches Hotlinking oder anderen Zugriff.
quelle
Speichern Sie niemals benutzergenerierte Dateien in den Komponentenverzeichnissen. Möglicherweise verlieren Sie sie während eines Updates Ihrer Komponente (wenn dies nicht ordnungsgemäß durchgeführt wurde) oder sicher, wenn der Benutzer sie deinstalliert.
Der richtige Ort zum Speichern solcher Dateien ist der Ordner "images". Hier kann der Benutzer die Dateien einfach mit dem Medienmanager verwalten. Der Ordner "Medien" wäre eine weitere praktikable Wahl, aber er ist eigentlich eher dazu gedacht, Erweiterungs-Assets wie CSS, JS und dergleichen aufzunehmen.
Wenn die Dateien jedoch sinnvolle Daten enthalten, die niemandem zur Verfügung stehen sollten, ist es eine schlechte Idee, sie in einem dieser Ordner zu speichern. Selbst wenn Sie sie hashen, können Sie sicher sein, dass irgendwann jemand sie lesen kann.
Wenn es sicher sein muss, speichern Sie die Datei entweder gar nicht und generieren Sie sie stattdessen dynamisch auf Anfrage. Oder speichern Sie es außerhalb von Webroot und greifen Sie mit PHP darauf zu. Es gibt keinen anderen sicheren Weg.
quelle
You may end up loosing them during an update of your component
>> Ich glaube nicht, dass in einem Verzeichnis gespeicherte Dateien entfernt werden, es sei denn, Sie geben dies im Aktualisierungsskript an. Stimmen Sie der Deinstallation zuDie Verwendung des folgenden Verzeichnisses als Stammverzeichnis für alle Rechnungen ist völlig in Ordnung:
Ich würde jedoch empfehlen, den Dateinamen zu hashen, sobald die Rechnung erstellt wurde. Wie so:
Entweder das oder Sie erstellen für jede Rechnung ein Hash-Verzeichnis und speichern die PDF-Datei dort wie folgt:
Aktualisieren:
Wenn diese Methode ausgewählt ist, können Sie eine htaccess-Datei verwenden, um den direkten Zugriff zu verhindern und nur den PHP-gesteuerten Zugriff auf diese PDF-Dateien zuzulassen.
Für einen PHP-gesteuerten Download würde ich empfehlen, den Hash zusammen mit der Benutzer-ID in einer Datenbanktabelle zu speichern. Wenn Sie aufgefordert werden, die Datei herunterzuladen, können Sie die von Ihnen gespeicherte ID mit der ID des aktuell angemeldeten Benutzers abgleichen und natürlich den in der Datenbank gespeicherten Hash abgleichen.
quelle
images
,media
oder einen Ordner außerhalb von Webroot.Für mich ist der Medienordner am besten für diesen Zweck geeignet. Um den direkten Zugriff einzuschränken, erstellen Sie einfach eine .htaccess-Datei in Ihrem Ordner mit dem folgenden Inhalt.
quelle