2016-04-27 5 views
1

Ich habe meine Datei Upload-Typ beschränkt auf nur TXT mit. SoImplementieren Datei Upload-Typ in Java

FormFile fileObj = null; 

, selbst wenn jemand eine exe-Datei in txt-Datei ändert und versucht, es zu laden Ich bin in der Lage, das zu herauszufiltern mit Hilfe von AutoDetectParser,ParseContext,metadata.

Jetzt habe ich eine Batch-Datei, die nach dem Konvertieren in TXT, erfolgreich hochgeladen wird.

Der Inhaltstyp dieser Datei ist text/plain das gleiche für txt.

Jetzt, Wie kann ich diese Datei vom Hochladen beschränken? Hat jede Art von Dateiinhalt eine Signatur, aufgrund derer wir die hochgeladene Datei unterscheiden können? Ist es möglich, diese Java-Datei, Batch-Datei nach der Umwandlung in txt zu beschränken?

Antwort

1

Ich nehme an, Sie sprechen über Windows-Batch-Dateien. Diese haben keine Kopfzeile oder andere Eigenschaft, die sie von "normalen" Textdateien genau unterscheidbar machen würde. Batch-Dateien sind, in der Tat "normale" Textdateien, d. H. Sie sind normalerweise einfache ASCII-Dateien. Um sie zu entdecken, könnte man sich beliebig komplexe Heuristiken vorstellen - mit unterschiedlicher Erfolgsquote - also, nein, man kann sie nicht zuverlässig erkennen.

Sie können Batch-Dateien auch nicht wirklich "beschränken", OK, vielleicht. Sie könnten GOTO :eof der Datei voranstellen oder jede Zeile mit REM oder :: voranstellen, was alles in der Batch-Datei effektiv deaktiviert. Oder mach andere Tricks, vielleicht.

Aber ich bin nicht ganz sicher, warum Sie das tun möchten. In einer normalen Webanwendung sollten hochgeladene Dateien einfach in einem eingeschränkten Teil des Dateisystems gespeichert werden und nicht ausführbar sein. Wenn ein Angreifer eine hochgeladene Datei beliebiger Art in einem Teil Ihrer Infrastruktur ausführen kann, scheint dies zunächst ein architektonisches Problem zu sein.

+0

Also, wenn dies der Fall für Windows Batch-Dateien ist, haben alle Dateien, die lesbaren Inhalt haben die gleiche Signatur wie .java, .jsp, .vbs usw. –

+0

@AshutoshSingh: Wenn durch "gleiche Signatur" Du meinst "keine Signatur", dann grundsätzlich ja, aber auch nicht ganz. Zum Beispiel erlauben einige Dateien die Kodierung in Unicode, und * könnte * mit einer [BOM] beginnen (https://en.wikipedia.org/wiki/Byte_order_mark). Dies ist eine Signatur, die jedoch nicht erlaubt, z. B. .java von .vbs – zb226

+0

zu unterscheiden. Ist es also möglich, diese Stückliste zu verwenden, auf der die Dateitypen unterschieden werden können? Wenn ja, wie? –

Verwandte Themen