Dotnet核心:阻止通过浏览器直接访问图像的最佳方法是什么?

时间:2017-01-29 20:48:24

标签: c# browser .net-core asp.net-core-webapi

我已经设置了一个dotnet核心API(在IIS8上),为(aurelia)应用程序打开了一个上传文件夹。我打开了这个文件夹的访问权限

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 个答案:

答案 0 :(得分:1)

静态文件的请求没有达到中间位置,因为IIS的静态文件处理程序在它到达.NET Core之前处理请求。

只需从IIS中的“模块”功能中删除“StaticFileModule”(适用于您的.NET Core网站或服务器级别),并且请求应该通过。

以下是提及此问题的官方.NET Core文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations

修改

根据文件:

  

如果启用了IIS静态文件处理程序并且未正确配置ASP.NET核心模块(ANCM)(例如,如果未部署web.config),则将提供静态文件。

这实际上与我上面提到的相反。虽然删除静态文件处理程序仍应解决问题,但您还应检查ANCM配置。