Публикация расширений .cs и других в IIS 7.0 - PullRequest
7 голосов
/ 17 января 2011

Я разрабатываю веб-приложение и запускаю его с помощью IIS. Мое приложение - файловый сервер. Мне нужно визуализировать файлы в веб-браузере, и у меня возникают проблемы при просмотре некоторых файлов или каталогов.

Например, я не могу просматривать файлы с расширением .cs или содержимое каталогов с именем bin. Веб-сервер возвращает 404 для этих 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.

Я полагаю, что это своего рода защита IIS. Мои вопросы:

  1. Знаете ли вы, почему IIS фильтрует эти файлы?
  2. Знаете ли вы, как настроить IIS для получения этих URL-адресов?

И самый важный для меня вопрос:

  • Мне нужно развернуть свое веб-приложение для многих клиентов, поэтому я хотел бы настроить его программно. Знаете ли вы, может ли он быть настроен в веб-приложении , вместо IIS правильно? В другом случае, как я могу настроить его с помощью сценария или аналогичного?

Ответы [ 5 ]

10 голосов
/ 17 января 2011

Ну,

Наконец мне пришлось изменить настройки IIS, чтобы переопределить requestFiltering :

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

И затем я использовал следующую конфигурацию в моем файле Web.config: Обратите внимание, что теперь все файлы на веб-сервере незащищены . Вам необходимо настроить свои правила, чтобы защитить каталог bin, а также файлы кода или все, что вы хотите.

  <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 голосов
/ 17 января 2011

При установке .NET Framework и регистрации ASP.NET по умолчанию скажет IIS не обслуживать эти файлы. Если вам нужно REALLY , вам нужно изменить раздел Фильтрация запросов в IIS.

В приведенном ниже примере показано, как включить расширения .cs:

<system.webServer>
    <security>
        <requestFiltering>
            <fileExtensions>
                <remove fileExtension=".cs" />
                <add fileExtension=".cs" allowed="true" />
            </fileExtensions>
        </requestFiltering>
    </security>
</system.webServer>
2 голосов
/ 17 января 2011

Я бы предположил, что вы делаете что-то не так.Вы не хотите, чтобы IIS обслуживал ваши файлы напрямую с диска по разным причинам (например, любой файл .html или .xml будет перерисован, а не загружен его содержимое).

Вам нужно, чтобы ваш код отправлял файлы пользователю, а не позволял IIS это делать.Это обойдет ограничения IIS (поскольку вы отправляете код, а не он), и все равно сохранит ограничения IIS для структуры папок ваших приложений.

2 голосов
/ 17 января 2011

Это мера безопасности, так как в системе установлен asp.net.

От Microsoft

Все запросы с / bin в URL отклонил и вернул ошибку 404 (IIS 6,0)

Это происходит, когда установлены IIS 6.0 и ASP.NET. С целью занять более активную позицию против злоумышленников и злоумышленников, фильтр ASP.NET ISAPI, aspnet_filter.dll, блокирует входящие запрос, содержащий / bin в URL. Такое поведение происходит на всем сервере, независимо от того, является ли запрос статический или динамический контент.

The Предпочтительным решением этой проблемы является изменить путь к содержанию на сервер так что / bin не нужен в любой запрос.

Если URL контента не может быть изменено, альтернатива Решение состоит в том, чтобы установить раздел реестра, который останавливает фильтр ASP .NET ISAPI от фильтрация запросов, содержащих / bin в URL. Это для всего сервера установка.

Лучше избегать всех папок / bin, чем включить это на вашем сервере

Чтобы включить обслуживание файлов .cs, попробуйте эту статью о Serverfault https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5

Поскольку их предложение является исправлением веб-конфигурации, вы можете применять его для каждого сайта по своему усмотрению.

1 голос
/ 17 января 2011

Эти файлы фильтруются в целях безопасности, например, если я знаю, что на вашем сайте есть страница http://example.com/default.aspx Я мог бы просто загрузить код для этой страницы, введя http://example.com/default.aspx.cs в своем браузере,То же самое относится и к папке bin.

Как вы пытаетесь отобразить эти файлы через собственный интерфейс или разрешить просмотр каталогов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...