2009-06-12 2 views
39

w naszej aplikacji ASP.NET MVC, zauważyliśmy, że nie możemy mieć zakazanego DOS nazwy plików — COM1 poprzez COM9, LPT1 przez LPT9, CON, AUX, PRN, i NUL — w dowolnym miejscu na naszych trasach. Nieuchronnie skutkują tym, że IIS powie nam, że pliku nie można znaleźć, nawet jeśli ustaliliśmy routing, aby nie sprawdzać najpierw istnienia plików. Jak możemy obejść to?ASP.NET MVC Routing vs. zastrzeżone nazwy plików w systemie Windows

+11

Dla zabawy, naciśnij http://stackoverflow.com/com1 i porównaj z http://stackoverflow.com/ThisDoesNotExist – kamens

+0

co ciekawe, stackoverflow.com/clock$ działa dobrze, nawet jeśli CLOCK $ jest zastrzeżoną nazwą urządzenia jako dobrze. –

+12

Wykorzystując tę ​​wiedzę, udało mi się z powodzeniem uniemożliwić nawigację do mojej strony użytkownika. Woot. –

Odpowiedz

35

Zostało to uwzględnione w ASP.NET 4. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

można zastosować ustawienie w web.config, które rozluźnia to ograniczenie.

<configuration> 
    <system.web> 
    <httpRuntime relaxedUrlToFileSystemMapping="true"/> 

    <!-- ... your other settings ... --> 
    </system.web> 
</configuration> 

Nadzieję, że pomaga.

+0

Dzięki Phil! Zastanawiam się, dlaczego nie jest to domyślne w .net 4. – bkaid

+0

@thekaid: kompatybilność wsteczna: MS nie może być pewne, że nikt nie zależy od starego zachowania. – Richard

+1

@thekaido To, co Richard powiedział, jest dokładnie słuszne. Byłbyś zaskoczony typami błędów, na których ludzie zaczynają polegać. – Haacked

18

Od zadawania pytania, stwierdziłem, że błąd jest w ASP.NET właściwe, a nie IIS lub ASP.NET MVC, co oznacza, że ​​nie ma sposobu obejścia go. Jedynym rozwiązaniem jest ręczne blokowanie adresów URL pasujących do tych nazw i nazw, po których następuje kropka i losowe znaki.

+3

Yup. :) Zespół ASP.NET zdaje sobie sprawę z tego błędu i szuka go w ASP.NET 4. Nie można zagwarantować, że zostanie on naprawiony, ale przynajmniej istnieje zainteresowanie tym, aby było to lepsze dla programistów. – Levi