2012-08-10 7 views
6

Datei-Upload-Datei zu validieren/validieren Ich möchte eine Whitelist von Dateitypen haben, die Benutzer auf meinen IIS-Server hochladen können (ich verwende IIS v7.5).Wie Datei-Upload-Dateitypen serverseitig auf IIS

Was sind die Optionen, die ich habe? Zum Beispiel, Dateigröße zu 5 MB für eine bestimmte Aktion in meinem Controller zu beschränken, fügte ich diesen Abschnitt meines webconfig:

<location path="home/fileupload"> 
    <system.web> 
    <!-- maxRequestLength is in kilobytes (KB) --> 
    <httpRuntime maxRequestLength="5120" /> <!-- 5MB --> 
    </system.web> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <!-- maxAllowedContentLength is in bytes --> 
     <requestLimits maxAllowedContentLength="5242880"/> <!-- 5MB --> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</location> 

Gibt es eine Option in der webconfig eine weiße Liste der erlaubten Dateitypen festlegen? Oder besteht die einzige Möglichkeit darin, die Dateitypen im Code zu validieren, wenn die Datei vollständig hochgeladen wurde? Was ist die empfohlene Technik? Wie kann ich sicher sein, dass die .docx, .pdf, .jpg usw. wirklich sind, was sie sind?

+0

Gibt es einen Grund, es nicht auf der Client-Seite zu validieren? –

+1

, weil dies nicht alle Browser sind, die diese Funktion unterstützen, und auch weil alles serverseitig validiert werden sollte! –

+0

@AlexandreJobin Wie sicher wollen Sie sein, dass die Datei IS ist, was der Benutzer sagt, es ist? – Jared

Antwort

3

Da Sie Server-Seite wollen, könnten Sie die Dateien Mime-Typ verwenden.

THIS Post zeigt, wie Sie den MIME-Typ basierend auf dem Inhalt der Dateien ermitteln (anstatt durch die Erweiterung).

Wenn Sie die Eingabe auf die Dateierweiterung SPECIFIC beschränken möchten, können Sie einfach den Namen der Eingabe mit dem bestätigen, was Sie akzeptieren möchten.Wenn dies der Fall ist, können Sie eine XRef gegen die Bibliothek in dem Beitrag machen, den ich verlinkt habe, um sicherzustellen, dass der Benutzer nicht nur die Dateierweiterung für Sie ändert.

Dies würde eine ziemlich gute Gewissheit geben, dass die Datei eine ist, die Sie akzeptieren möchten!

EDIT: Basierend auf den bisherigen Kommentaren .... Basierend auf dem, was Sie gesagt haben, dass Sie nach dieser Methode suchen, sollte ganz nett für Sie arbeiten. Mein Vorschlag, wenn Sie es nur auf die Dateitypen beschränken wollen, die in einem Ihrer Kommentare aufgelistet sind ... Machen Sie eine einfache Überprüfung der Dateierweiterung. Wenn dies der Fall ist, übergeben Sie die Datei an die Adresse urlmon.dll, die im Link aufgeführt ist. Stellen Sie sicher, dass es nicht als ungültiger Typ zurückkommt .... aka Executable/java/zip/etc. Wenn es sich nicht um einen ungültigen Typ handelt, haben Sie eine sehr hohe Gewissheit, dass es sich um eine sichere Datei handelt!

Schließlich durchlesen der Kommentare zu diesem Beitrag sieht aus wie die urlmon.dll unterstützt möglicherweise alle Dateitypen, die Sie wollen implizit, die die Notwendigkeit, zu überprüfen, dass es keine ausführbare Datei oder etwas dieser Art, aber Sie ist müsste bestätigen, dass doc/docx/xsl/xslx einen gültigen Mime-Typ zurückgibt.

0

Daten Anotations ist das, was Sie suchen, hier ist eine Suche, die Ihnen helfen können, google data anotaions

aktualisieren

Ich denke, es aus der Dateierweiterungen überprüft. Wenn Sie sich nicht auf file extensions verlassen wollen, dann ist Ihre beste Wette, wenn Sie sich von MIME types abmelden. Dies ist komplexer und variiert von Browser zu Browser und kann gefälscht werden (obwohl dies komplexer ist als das Fälschen einer Erweiterung).

Eine einfache, aber nicht kostenlose Option ist die Verwendung von Telerik RadAsyncUpload.

Sie könnten diesen Code selbst schreiben (obwohl ich nie damit durcheinander gebracht habe) this kann Sie beginnen. (Dieser Beitrag befasst sich mit der Tatsache, dass Sie Mime-Typen ohne IIS nicht zuverlässig erkennen können, aber es sollte Sie auf Ihrem Weg bringen.)

Hoffentlich wird Sie das in Gang bringen. Wie Sie wissen, können Sie Dateien nach ihrer Größe einschränken, nach ihren Erweiterungen validieren, und wenn Sie die Validierung durch MIME-Typen hinzufügen, haben Sie meiner Meinung nach alles getan, was Sie können. Ich denke, das ist alles, was Sie tun können, um sicher zu sein und gültige Dateien nicht auszuschließen; obwohl ich davon gehört habe, die Datei zu hashen und einige andere Optionen; aber diese werden trotzig legitime Dateien ausschließen.

Wie bereits erwähnt, können MIME-Typen gefälscht und an Ihren Server gesendet werden, um besonders sicher zu sein, sollten Sie sowohl auf der Client- als auch auf der Serverseite validieren.

+0

Wird die Data Annotation die Gültigkeit überprüfen einer Datei oder einfach die Dateiendung überprüfen? – Jared

+0

@Jared sehe mein Update. –

+0

Der RadAsyncUpload wird nach der Dateiendung filtern, so dass ich dies selbst auf der Serverseite und auf der Clientseite tun kann. Ich benutzte die MVC-Version ihrer Steuerelemente :) –

1

Nein, es gibt keine web.config-Einstellung, um einzuschränken, was hochgeladen wird. Die einzige Möglichkeit, hochgeladene Daten zu überprüfen, besteht darin, diese Daten tatsächlich im Code zu validieren.

Selbst wenn es eine Einstellung gäbe, wäre es sowieso nutzlos, weil sie auf den Content-Type-Headern basieren würde, die vom Client empfangen wurden, was ziemlich falsch sein kann.

In Code können Sie sicherlich den Content-Type-Header sehen, aber wenn Sie versuchen zu validieren, dass die hochgeladenen Daten von einem bestimmten Typ sind, müssen Sie dies manuell tun, basierend auf was Art von Daten, die Sie erwarten. Für ein Bild ist das einfach. Bei anderen Dateitypen kann es viel schwieriger sein.

+0

Also, was wäre Ihre Technik, um die Datei zu validieren? Kennen Sie eine gute Bibliothek, die den echten Dateityp validieren könnte? –

+0

Es hängt von der Datei ab. Es gibt keine magische Lösung, um alle Dateitypen zu validieren. Mit welcher Art von Datei möchten Sie arbeiten? – dodexahedron

+0

Für mein aktuelles Projekt muss ich pdf, doc, docx, xls, xlsx, Bilder validieren. Ich werde keine Videos oder Audios haben. Nur druckbare Dokumente. –