Я установил 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);
}
Может ли кто-нибудь сказать мне, что лучший способ заблокировать прямой доступ к изображениям и разрешить определенному приложению загружать изображения?
Спасибо за ответ! Итак, «Удаляя статический файл», вы говорите, что вы удаляете «UseFileServer»? Но тогда папка uploads больше недоступна для api? При вызове прямого URL-адреса через браузер (локально), хотя он попадает в строку if statement и возвращает 401, но он все еще показывает изображение в браузере. –
Нет, я имею в виду вход в IIS (inetmgr) на сервере (или локально, если в dev), перейдите на сайт, выберите «Модули» и удалите «StaticFileModule». Все через графический интерфейс. –
Хорошо, я могу это сделать, но локально (через dotnet cli) он попадает на мое промежуточное ПО, но я все еще не могу заблокировать запрос. Любая идея, почему это так? –