2011-08-03 12 views
7

Szukam dobrego rozwiązania, dzięki któremu możemy zapobiec przesłaniu pliku exe na serwer.jak zapobiec ładowaniu pliku exe w asp.net mvc

Najlepiej, jeśli możemy odrzucić przesyłanie, czytając nagłówki plików, gdy tylko je otrzymamy, zamiast czekać na przesłanie całego pliku.

Mam już zaimplementowane sprawdzanie rozszerzenia, szukając lepszego rozwiązania.

+3

Nagłówki plików mogą być kute. Sprawdź pierwsze dwa bajty przesłanych danych - jeśli to "MZ", szanse na to, że masz plik wykonywalny. –

+0

duplikat: http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu

Odpowiedz

7

Istnieje część "jak" i "kiedy/gdzie". Sposób jest dość prosty, ponieważ pliki binarne zawierają nagłówek, a nagłówek jest dość łatwy do usunięcia i sprawdzenia. W przypadku plików systemu Windows można sprawdzić artykuł Executable-File Header Format. Podobne formaty są używane w innych typach binarnych, więc możesz określić typy, które akceptujesz, a które nie.

UWAGA: Połączony artykuł służy do pełnego sprawdzania pliku. Istnieją tanie, zniszczone i brudne skróty, w których bada się tylko kilka bajtów.

Kiedy/gdzie zależy od sposobu pobierania plików. Jeśli używasz wysoce abstrakcyjnej metodologii (biblioteki przesyłania), co jest dość normalne, być może będziesz musiał przesłać cały plik, zanim zaczniesz sprawdzać bity. To czy jest przesyłane strumieniowo do pamięci, czy też trzeba je zapisywać i usuwać, zależy od twojego kodowania, a nawet od biblioteki. Jeśli kontrolujesz przesyłanie strumieniowe, możesz przesyłać strumieniowo pierwsze bajty (część nagłówka) i przerwać proces w strumieniu środkowym.

1

Myślę, że można to zrobić poprzez javascript, sprawdzając, czy plik kończy się .exe przed przesłaniem danych, a także po stronie serwera wyboru.

2

Pierwszy punkt dostępu do przesłanych danych będzie w module HttpModule. Technicznie możesz sprawdzić, zanim wszystkie bajty zostaną wysłane, jeśli masz .exe na swoich rękach i anulować wysyłanie. Może to być dość skomplikowane w zależności od tego, jak daleko zajmiesz to.

Proponuję spojrzeć na HttpModule z NeatUpload Brettle'a. Może daje ci to przewagę nad tym, jak sobie z tym poradzić na żądanym poziomie.

Powiązane problemy