Как ограничить загрузку файлов указанных типов - PullRequest
3 голосов
/ 01 сентября 2009

Я хочу ограничить свое веб-приложение, чтобы файлы .txt не могли быть загружены / показаны. Это то, что я могу настроить в моем файле web.config?

Я попробовал это в моем конфигурационном файле:

<system.web>
    <httpHandlers>
        <add verb="*" path="*.txt" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
</system.web>

... но это не имело никакого эффекта. Я использую IIS7 и приложение .NET3.5, это может иметь какое-то отношение к этому? Я знаю, что это на самом деле будет работать для .NEt 1.0 1.1 и 2.0.

Я заметил в документации для этого ( добавить httpHandlers ), раздел Требования :

Microsoft Internet Information Services (IIS) версии 5.0, 5.1 или 6.0
.NET Framework версии 1.0, 1.1 или 2.0
Microsoft Visual Studio 2003 или Visual Studio 2005

... это означает, что это не поддерживается в .NET 3 и IIS7 ...

Где это указано в IIS7?

Ответы [ 4 ]

9 голосов
/ 01 сентября 2009

Ознакомьтесь с этой статьей службы поддержки MS, чтобы узнать, как этого добиться: КАК: Использование ASP.NET для защиты типов файлов .

Это включает в себя настройку IIS для пересылки этих запросов в ASP.NET, а затем настройку web.config для блокировки файлов нужного типа, например: (nb это работает для вашего компьютера разработчика и до IIS7 - обязательно посмотрите ниже)

<system.web>
    <httpHandlers>
        <add verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
</system.web>

Согласно странице элемента httpHandlers , следующие расширения по умолчанию запрещены .NET 2.0 (.ini не является одним из них):

*. Asax, * .ascx, * .master, * .skin, * .browser, * .sitemap, * .config, * .cs, * .csproj, * .vb, * .vbproj, * .webinfo , * .licx, * .resx, * .resources, * .mdb, * .vjsproj, * .java, * .jsl, * .ldb, * .dsdgm, * .ssdgm, * .lsad, * .ssmap, * .cd, * .dsprototype, * .lsaprototype, * .sdm, * .sdmDocument, * .mdf, * .ldf

РЕДАКТИРОВАТЬ: это относится к версиям IIS до IIS 7.0. В IIS 7.0 добавлен дополнительный режим работы, называемый интегрированным режимом (по умолчанию для ASP.NET), который требует, чтобы обработчики помещались в <system.webServer>/<handlers> вместо <system.web>/<httpHandlers>. Я добавил дополнительную информацию и ссылки на ответ @ awe на этой странице, за подробностями обращайтесь к нему.

ВАЖНО! для IIS 7.0 или более поздней версии

Как указано в правке, вам нужно поместить элемент <add> в другое место , а правилу тоже нужно имя - если вы не укажете имя, вы получите 500 Internal Error при перезапуске

  <system.webServer>
        <handlers>
            <add name="IgnoreIni" verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
        </handlers>
    </system.webServer>
4 голосов
/ 02 сентября 2009

OK. Я обнаружил проблему. В .NET 3 это указано в другом разделе файла web.config. Вместо <system.web><httpHandlers> он находится в <system.webServer><handlers>, например:

<system.webServer>
  <handlers>
    <add name="NoTxtAllowed" verb="*" path="*.txt" 
       type="System.Web.HttpForbiddenHandler" />
  </handlers>
</system.webServer>

Хотя этот ответ и помог мне, я пометил ответ от Ахмад Магид как ответ , как он его предоставил ранее. Я добавил информацию о версии .NET 3 в моем вопросе. Он также указал мне правильное направление, чтобы найти решение. Обратите внимание, что его ответ верен для всех версий .NET до 3.

РЕДАКТИРОВАТЬ: IIS 7.0 поддерживает 2 режима, встроенный и классический. Интегрированный режим является режимом по умолчанию для приложений ASP.NET в IIS 7.0, для которых требуется, чтобы обработчики помещались в <system.webServer>/<handlers> вместо <system.web>/<httpHandlers> (это поддерживается в классическом режиме и предыдущих версиях IIS).

Полезные ссылки по этой проблеме:

2 голосов
/ 01 сентября 2009

Это то, что вы установили в IIS, но оно должно быть там по умолчанию уже.

0 голосов
/ 01 сентября 2009

Можете ли вы изменить их на .config? или .aspx?

...