4 Stimmen

Wie kann ich einen Ordner sichern, in den Benutzer Dateien hochladen können?

Ich habe einen Ordner auf meinem Webserver, in den die Benutzer über eine ASP-Seite Fotos hochladen können.

Ist es sicher genug, IUSR Schreibrechte für den Ordner zu geben? Muss ich etwas anderes absichern? Ich habe Angst, dass Hacker die ASP-Seite umgehen und Inhalte direkt in den Ordner hochladen.

Ich verwende ASP classic und IIS6 auf Windows 2003 Server. Der Upload erfolgt über HTTP, nicht über FTP.

Edit: Ich habe die Frage aus Gründen der Klarheit geändert und meine Antworten als Kommentare hinzugefügt.

3voto

pilif Punkte 12278

Außerdem würde ich empfehlen, die Benutzer nicht in einen Ordner hochladen zu lassen, der über das Internet zugänglich ist. Selbst die beste MIME-Typ-Erkennung kann fehlschlagen, und Sie wollen auf keinen Fall, dass Benutzer z. B. eine als jpeg getarnte ausführbare Datei hochladen, wenn Ihr MIME-Sniffing fehlschlägt, das im IIS aber korrekt funktioniert.

In der PHP-Welt ist es sogar noch schlimmer, denn ein Angreifer könnte ein bösartiges PHP-Skript hochladen und später über den Webserver darauf zugreifen.

Speichern Sie die hochgeladenen Dateien immer in einem Verzeichnis außerhalb des Dokumentenstamms und greifen Sie auf sie über ein Zugriffsskript zu, das zusätzliche Bereinigungen vornimmt (und zumindest explizit einen MIME-Typ image/whatever setzt).

1voto

Ben Williams Punkte 2267

Wie wird der Nutzer die Fotos hochladen? Wenn Sie eine ASP-Seite schreiben, um die hochgeladenen Dateien zu akzeptieren, benötigt nur der Benutzer, unter dem IIS läuft, Schreibrechte für den Ordner, da IIS die Datei-E/A durchführt. Ihre ASP-Seite sollte die Dateigröße überprüfen und über eine Form der Authentifizierung verfügen, um zu verhindern, dass Hacker Ihre Festplatte füllen.

Wenn Sie einen FTP-Server oder eine andere Dateiübertragungsmethode einrichten, hängt die Antwort von der von Ihnen gewählten Methode ab.

0voto

chrisofspades Punkte 817

Sie müssen Schreibrechte erteilen, aber Sie können den Mime-Typ der Datei überprüfen, um sicherzustellen, dass es sich um ein Bild handelt. Sie können BFS wie folgt verwenden:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

Außerdem haben die meisten COM-Upload-Objekte eine Typeigenschaft, die Sie vor dem Schreiben der Datei überprüfen können.

0voto

user14094 Punkte 23

Ihr bestes Preis-Leistungs-Verhältnis wäre wahrscheinlich die Verwendung einer Upload-Komponente (ich habe ASPUpload verwendet), mit der Sie Dateien aus einem Ordner hoch- oder herunterladen können, der von der Website aus nicht zugänglich ist.

Sie erhalten einige Authentifizierungshaken und müssen sich keine Sorgen machen, dass jemand zufällig den Ordner durchsucht und die Dateien herunterlädt (oder in Ihrem Fall hochlädt), da die Dateien nur über die Komponente verfügbar sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X