2017-01-29 16 views
1

Я установил API-интерфейс dotnet-ядра (на IIS8), который открывает папку uploads для приложения (aurelia). Я открыл доступ к этой папке, как этотDotnet core: Каков наилучший способ заблокировать прямой доступ к изображениям через браузер?

app.UseFileServer(new FileServerOptions() 
     { 
      FileProvider = new PhysicalFileProvider(Configuration["ApiSettings:UploadsFolder"]), 
      RequestPath = new PathString("/uploads/"), 
      EnableDirectoryBrowsing = true 
     }); 

Это прекрасно работает как приложение может открыть загруженные изображения в приложении через URL. Теперь я хочу заблокировать доступ к этим изображениям, когда URL-адрес введен непосредственно в браузере. Я видел решения C#, но не смог найти решение для ядра dotnet.

Я использую промежуточное программное обеспечение для перехвата запросов, отправляемых в api. Но не удалось перехватить конкретные запросы изображений через браузер и заблокировать их. Единственное, что разрешено для доступа к изображениям, должно быть моим приложением aurelia в фиксированном домене.

public async Task Invoke(HttpContext context) 
{ 
    StringValues referer; 
    context.Request.Headers.TryGetValue("Referer", out referer); 

    // Referer will contain the full URL of the image when requested 
    // via the browser. When its requested differently it will contain 
    // the url of the requesting application 
    if (referer.Any() && referer.First().Contains("/uploads/")) 
    { 
     context.Response.StatusCode = 401; 
     return; 
    } 

    await _next.Invoke(context); 
} 

Может ли кто-нибудь сказать мне, что лучший способ заблокировать прямой доступ к изображениям и разрешить определенному приложению загружать изображения?

ответ

1

Запросы на статические файлы не попадают в вашу середину, потому что статический обработчик IIS обрабатывает запрос до его получения в .NET Core.

Просто удалите «StaticFileModule» из функции «Модули» в IIS (для вашего веб-сайта .NET Core или на уровне сервера), и запросы должны пройти.

Вот официальная документация ядра .NET, говорит об этом: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations

Редактировать

Согласно документации:

Если обработчик статического файла IIS включен и ASP. NET Core Module (ANCM) настроен неправильно (например, если web.config не был развернут), будут загружены статические файлы.

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

+0

Спасибо за ответ! Итак, «Удаляя статический файл», вы говорите, что вы удаляете «UseFileServer»? Но тогда папка uploads больше недоступна для api? При вызове прямого URL-адреса через браузер (локально), хотя он попадает в строку if statement и возвращает 401, но он все еще показывает изображение в браузере. –

+0

Нет, я имею в виду вход в IIS (inetmgr) на сервере (или локально, если в dev), перейдите на сайт, выберите «Модули» и удалите «StaticFileModule». Все через графический интерфейс. –

+0

Хорошо, я могу это сделать, но локально (через dotnet cli) он попадает на мое промежуточное ПО, но я все еще не могу заблокировать запрос. Любая идея, почему это так? –

 Смежные вопросы

  • Нет связанных вопросов^_^