Как запретить доступ к файлу с помощью веб-конфигурации ASP.NET, а не только локально? - PullRequest
9 голосов
/ 03 марта 2011

У меня проблема с файлом веб-конфигурации ASP.NET.Я хочу отказать некоторым пользователям или ролям в доступе к конкретному файлу PDF.Я использую членство в ASP.NET и систему управления ролями.Поэтому я добавил эти строки кодов в файл Web.config:

<location path="myfile.pdf">
    <system.web>
        <authorization>
            <allow roles="admin"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

и поместил его в каталог, в котором находится файл.Теперь, когда я запускаю проект в локальной системе, я не могу получить доступ к файлу PDF, когда я вхожу с ролью «admin».Но когда я публикую проект на веб-сервере, я не могу просмотреть папку, но могу просмотреть файл PDF, когда просматриваю полный путь к файлу PDF.Итак:

У меня нет доступа: http://www.example.com/folder

, но я могу просмотреть: http://www.example.com/folder/myfile.pdf

Ответы [ 2 ]

11 голосов
/ 07 марта 2011

IIS, вероятно, обслуживает файл PDF, прежде чем ASP.Net получит его в свои руки. Предполагая, что вы используете .Net 4.0, добавьте это в файл Web.config, чтобы заставить все запросы перетекать в ASP.Net:

.
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
<system.webServer>
2 голосов
/ 07 марта 2011

Вам нужно отправлять IIS запросы PDF в ASP.NET, чтобы ваши вещи имели место.

Пример статьи:

Цитирование соответствующей части из статьи:

Подключение файлов PDF в веб-приложение с помощью IIS

Было легко протестировать пользовательский обработчик HTTP на встроенном веб-сервере Visual Studio, Cassini., поскольку все типы документов автоматически обрабатываются в веб-приложении по умолчанию.Однако IIS нужно несколько настроек.IIS будет игнорировать отправку запросов на статические документы, такие как файлы PDF, в веб-приложение ASP .NET и вместо этого будет просто обслуживать запрос.Нам нужно перехватить запрос и разрешить нашему веб-приложению сначала его обработать.Для этого нам нужно настроить отображение IIS для файлов PDF (* .pdf), сообщив IIS об отправке запроса в наше веб-приложение.

В IIS 5/6

  1. Откройте диспетчер служб IIS.
  2. Для вашего веб-приложения на вкладке Каталог нажмите кнопку Конфигурация.
  3. На вкладке «Сопоставления» окна «Конфигурация приложения» нажмите кнопку «Добавить», чтобы добавить новое сопоставление расширения приложения.
  4. В поле Исполняемый файл введите: C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll

  5. В поле Расширениевведите: * .pdf

  6. Выберите «Все глаголы» и установите флажок «Обработчик сценариев» и убедитесь, что файл существует.

В IIS 7

  1. Откройте диспетчер служб IIS.
  2. Открыть настройку сопоставления обработчиков.
  3. Добавить управляемый обработчик.
  4. В поле «Путь запроса» введите: * .pdf
  5. В поле «Тип» выберите пользовательский обработчик HTTP для приложения.

Ярлык к этому в IIS 7, как упомянуто выше в статье, состоит в том, чтобы определить отображение в web.config в разделе обработчиков system.webServer следующим образом:

<system.webServer> 
... 
<handlers> 
<add name="PDF" path="*.pdf" verb="*" type="CustomFileHandlerDemo.Handlers.FileProtectionHandler" resourceType="Unspecified" /> 
... 
</handlers> 
</system.webServer>

Приведенный выше код в веб-приложении web.config автоматически добавит запись в раздел «Сопоставления обработчиков IIS 7».

Вышеуказанные шаги могут отличаться в зависимости от вашей версии IIS, но они должны быть аналогичными для добавления сопоставления документов в веб-приложение.После настройки запросы на документы PDF будут отправляться в веб-приложение, где вы можете обработать запрос, прежде чем разрешить доступ.

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

Поскольку пользовательский обработчик не используется, вам просто нужно установить для обработчика ASP.NET обработчик по умолчанию,Это тот же обработчик, для которого установлено значение «.aspx», уже в IIS.

...