/ Sichern des Upload - Formulars bei php - php, Sicherheit, Datei - Upload

Absichern des Upload - Formulars bei php - php, Sicherheit, Datei - Upload

Ich mache ein Feature auf meiner Website, so dass Benutzerkann Dateien hochladen (jeden Typ). Um das Upload-Formular zu sichern, habe ich eine Blacklist mit nicht akzeptierten Dateitypen erstellt. Aber um meinen Server zu schützen (im Falle des Uploads von schädlichen Skripten in irgendeiner Weise) dachte ich mir tar die hochgeladenen Dateien (mit der tar-Klasse), damit sie als .tar gezippte Dateien gespeichert werden. Wenn der Benutzer es herunterladen möchte, erhält er eine TAR-Datei.

Meine Frage ist, ist das sicher genug? (Da die Dateien dann nicht ausgeführt werden können).

[Ich habe diese Reservierung, wie ich am Code der tar-Klasse sehen kann, der "fread ()"]

Vielen Dank!

Antworten:

2 für die Antwort № 1

Zwei Punkte, hier:

  • Die Verwendung einer Blacklist ist eine schlechte Idee : Du wirst niemals an alle möglichen bösartigen Dateitypen denken.
  • Speichern Sie die hochgeladenen Dateien nicht in einem öffentlichen Verzeichnis Ihres Servers:
    • Speichern Sie diese Dateien in a Verzeichnis, das nicht von Apache bedient wird, außerhalb deines DocumentRoot.
    • Und benutze ein PHP-Skript (Auch wenn Apachen die Dateien nicht über HTTP bereitstellen können, kann PHP sie lesen) um diese Dateien an den Benutzer zu senden, der sie herunterladen möchte.
    • Dadurch wird sichergestellt, dass diese hochgeladenen Dateien niemals ausgeführt werden.


Stellen Sie sicher, dass Ihr PHP-Skript, das den Inhalt einer Datei sendet, es niemandem erlaubt, eine mögliche Datei auf dem Server herunterzuladen ...


0 für die Antwort № 2

Sie können die Dateien an einen nicht webfähigen Speicherort (unter Ihrer Webroot) hochladen und dann ein Download-Skript zum Herunterladen der Datei verwenden.


0 für die Antwort № 3

Der beste Weg, hochgeladene Dateien zu bearbeiten, ist meinMeinung, ist es, sie in einem Ordner zu platzieren, der "nicht über HTTP erreichbar ist. Wenn dann eine Datei angefordert wird, verwenden Sie eine PHP-Datei zum Senden und dann Download-Header, die Verwendung readfile() um die Datei an den Benutzer zu senden. Auf diese Weise werden Dateien niemals ausgeführt.


0 für die Antwort № 4

Das könnte funktionieren, wenn man davon ausgeht, dass die Benutzer, die die Dateien herunterladen werden, sie entpacken können (die meisten Nicht-UNIX-Systeme haben nur eine Zip-Datei, ich gebe ihnen die Möglichkeit, beide Formate herunterzuladen).

Außerdem denke ich, es ist besser, eine Liste von erlaubten Dateien gegen verbotene Dateien zu erstellen. Es ist leicht zu vergessen, einen bestimmten Typ zu verbieten; während Sie wahrscheinlich eine bessere Vorstellung davon haben, was Benutzer hochladen können

Dateien auf der Erweiterung nicht blockieren / zulassen. Stellen Sie sicher, dass Sie den MIME-Typ verwenden, für den der Server die Datei identifiziert. Auf diese Weise ist es schwer für sie, es zu fälschen.

Speichern Sie die Dateien auch in einem nicht webfähigen Verzeichnis und laden Sie sie über ein Skript herunter.

Selbst wenn es eine schlechte Datei ist, können sie sie nicht ausnutzen, wenn sie nicht direkt darauf zugreifen können.

Stellen Sie beim Speichern der Dateien sicher, dass Sie diese Funktionen verwenden: http://php.net/manual/en/function.is-uploaded-file.php http://php.net/manual/en/function.move-uploaded-file.php

Dan