2011-01-17 11 views
7

Zajmuję się tworzeniem aplikacji sieci Web i jej uruchamianiem przy użyciu usług IIS. Moja aplikacja jest serwerem plików. Muszę wizualizować pliki w przeglądarce i mam pewne problemy z przeglądaniem niektórych plików lub katalogów.Publikowanie rozszerzeń plików .cs i innych w usługach IIS 7.0

Na przykład nie mogę wyświetlać plików z rozszerzeniem .cs ani zawartości katalogów o nazwie bin. Serwer sieci Web zwraca 404 dla tych adresów URL:

Server Error 

HTTP Error 404 - File or directory not found. 

Description: The resource you are looking for might have been removed, 
had its name changed, or is temporarily unavailable. 

Server Version Information: Internet Information Services 7.0. 

myślę, że jest to rodzaj ochrony, która ma IIS. Moje pytania to:

  1. Czy wiesz, dlaczego IIS filtruje te pliki?
  2. Czy wiesz, jak skonfigurować usługi IIS, aby umożliwić pobieranie tych adresów URL?

I najważniejsze pytanie dla mnie:

  • muszę wdrożyć mojej aplikacji sieci Web do wielu costumers, więc chciałbym go skonfigurować programowo. Czy wiesz, czy to może być skonfigurowane w aplikacji WWW, a zamiast IIS poprawnie? W innym przypadku, jak mogę skonfigurować go za pomocą skryptu lub podobnego?
+2

Pytanie brzmi - dlaczego chcesz to zrobić? Kiedy mówisz, że jest to serwer plików - masz na myśli, że chcesz stworzyć coś takiego jak www.net2ftp.com? W takim przypadku powinieneś mieć logikę aplikacji, aby pokazać zawartość katalogów, nie zezwalaj na to IIS, co nie jest bezpieczne. –

+0

@Frantisek: Tworzymy klienta WWW dla Plastic SCM, systemu kontroli wersji, podobnie jak GitHub. Problem polega na tym, że IIS filtruje pliki .cs, bin i tak dalej. Muszę zezwalać na wszystkie trasy i chronić tylko mój kod. –

Odpowiedz

10

No

końcu musiałem zmienić ustawienia IIS, pozwalając zastąpić requestFiltering:

In file %systemroot%\System32\inetsrv\config\applicationHost.config change: 
<section name="requestFiltering" overrideModeDefault="Allow" /> 

A potem użyłem następującej konfiguracji w moim Web.config: Zauważ, że teraz wszystkie pliki na serwerze sieci Web są niechronione. Musisz skonfigurować swoje reguły, aby chronić swój katalog bin, a także pliki kodu lub cokolwiek chcesz.

<system.webServer> 
    <security> 
     <!-- Very important, the IIS configuration must have the 
      overrideModeDefault to allow in the file 
      %systemroot%\System32\inetsrv\config\applicationHost.config --> 
     <!-- section name="requestFiltering" overrideModeDefault="Allow" /> --> 
     <requestFiltering> 
     <fileExtensions allowUnlisted="true"> 
      <remove fileExtension=".asa" /> 
      <remove fileExtension=".asax" /> 
      <remove fileExtension=".ascx" /> 
      <remove fileExtension=".master" /> 
      <remove fileExtension=".skin" /> 
      <remove fileExtension=".browser" /> 
      <remove fileExtension=".sitemap" /> 
      <remove fileExtension=".config" /> 
      <remove fileExtension=".cs" /> 
      <remove fileExtension=".csproj" /> 
      <remove fileExtension=".vb" /> 
      <remove fileExtension=".vbproj" /> 
      <remove fileExtension=".webinfo" /> 
      <remove fileExtension=".licx" /> 
      <remove fileExtension=".resx" /> 
      <remove fileExtension=".resources" /> 
      <remove fileExtension=".mdb" /> 
      <remove fileExtension=".vjsproj" /> 
      <remove fileExtension=".java" /> 
      <remove fileExtension=".jsl" /> 
      <remove fileExtension=".ldb" /> 
      <remove fileExtension=".dsdgm" /> 
      <remove fileExtension=".ssdgm" /> 
      <remove fileExtension=".lsad" /> 
      <remove fileExtension=".ssmap" /> 
      <remove fileExtension=".cd" /> 
      <remove fileExtension=".dsprototype" /> 
      <remove fileExtension=".lsaprototype" /> 
      <remove fileExtension=".sdm" /> 
      <remove fileExtension=".sdmDocument" /> 
      <remove fileExtension=".mdf" /> 
      <remove fileExtension=".ldf" /> 
      <remove fileExtension=".ad" /> 
      <remove fileExtension=".dd" /> 
      <remove fileExtension=".ldd" /> 
      <remove fileExtension=".sd" /> 
      <remove fileExtension=".adprototype" /> 
      <remove fileExtension=".lddprototype" /> 
      <remove fileExtension=".exclude" /> 
      <remove fileExtension=".refresh" /> 
      <remove fileExtension=".compiled" /> 
      <remove fileExtension=".msgx" /> 
      <remove fileExtension=".vsdisco" /> 
     </fileExtensions> 
     <hiddenSegments> 
      <remove segment="web.config" /> 
      <remove segment="bin" /> 
      <remove segment="App_code" /> 
      <remove segment="App_GlobalResources" /> 
      <remove segment="App_LocalResources" /> 
      <remove segment="App_WebReferences" /> 
      <remove segment="App_Data" /> 
      <remove segment="App_Browsers" /> 
     </hiddenSegments>   
     </requestFiltering> 
    </security> 
    ... 
</system.webServer> 
7

Po zainstalowaniu platformy .NET Framework i zarejestrowaniu programu ASP.NET will will default will tell IIS, aby nie wyświetlać tych plików. Jeśli chcesz tego dokonać, będziesz musiał zmodyfikować sekcjężądania filtrowania w IIS.

mieszek przykład pokazuje, w jaki sposób włączyć .cs rozszerzenia:

<system.webServer> 
    <security> 
     <requestFiltering> 
      <fileExtensions> 
       <remove fileExtension=".cs" /> 
       <add fileExtension=".cs" allowed="true" /> 
      </fileExtensions> 
     </requestFiltering> 
    </security> 
</system.webServer> 
+0

Gdzie znajduje się ten plik? –

+0

web.config w katalogu aplikacji. –

+1

Próbowałem dodać to do pliku Web.config, ale wygląda na to, że nie działa. Otrzymuję błąd wewnętrzny serwera 500. Sprawdziłem podwójnie składnię i wszystko jest w porządku. Czy muszę skonfigurować również IIS lub tylko moją aplikację. –

1

Pliki te są filtrowane dla bezpieczeństwa, na przykład jeśli wiem Twoja strona ma stronę w http://example.com/default.aspx może będę w stanie po prostu pobrać kod dla tej strony, wpisując http://example.com/default.aspx.cs w mojej przeglądarce. To samo dotyczy folderu bin.

W jaki sposób próbujesz wyświetlić te pliki za pomocą własnego interfejsu użytkownika lub umożliwiając przeglądanie katalogu?

2

Jest to środek bezpieczeństwa z powodu zainstalowania w systemie asp.net.

From Microsoft

Wszystkie wnioski z/bin w adresie URL są odrzucone i zwraca błąd 404 (IIS 6,0)

Dzieje się tak, gdy IIS 6.0 i ASP.NET są zarówno zainstalowany. Aby uzyskać bardziej proaktywne stanowisko , przeciwko złośliwym użytkownikom i atakującym, filtr ISAPI ASP.NET, aspnet_filter.dll, blokuje przychodzące żądanie zawierające/bin w adresie URL. To zachowanie występuje w całym serwerze, , niezależnie od tego, czy żądanie dotyczy zawartości statycznej lub dynamicznej o wartości .

preferowanym rozwiązaniem tego problemu jest zmodyfikować ścieżkę dostępu do zawartości na serwerze tak, że/bin nie jest konieczne w każdym wniosku.

Jeśli zawartość URL nie mogą być modyfikowane, alternatywne rozwiązanie jest ustawienie klucza rejestru zatrzymuje filtr ISAPI ASP .NET od wniosków filtrujących zawierających/bin w URL. Jest to ustawienie obejmujące cały serwer: .

Lepiej unikać wszelkich/bin foldery niż umożliwienie że na serwerze

Aby włączyć służąc .cs pliki spróbować tej ServerFault artykuł https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5

Ponieważ ich propozycja jest poprawka webconfig, można zastosować to na podstawie witryny, jak chciałeś.

2

Sugerowałbym, że robisz coś źle. Nie chcesz, aby usługi IIS wyświetlały pliki bezpośrednio z dysku z różnych powodów (na przykład, każdy plik .html lub .xml zostanie pobrany ponownie, zamiast pobierać jego zawartość).

To, co chcesz zrobić, to przesłać pliki do użytkownika, a nie pozwolić programom IIS. Spowoduje to obejście ograniczeń IIS (bo to Ty wysyłasz kod, a nie to) i nadal będzie utrzymywać ograniczenia IIS dla struktury folderów aplikacji.

Powiązane problemy