Dotnet core: 如何最好地阻止浏览器直接访问图像?

4
我已经在IIS8上设置了一个dotnet core API,用于为(aurelia)应用程序打开上传文件夹。我使用以下方式打开对该文件夹的访问权限:
app.UseFileServer(new FileServerOptions()
        {
            FileProvider = new PhysicalFileProvider(Configuration["ApiSettings:UploadsFolder"]),
            RequestPath = new PathString("/uploads/"),
            EnableDirectoryBrowsing = true
        });

这个应用程序可以通过URL在应用程序中打开已上传的图片,非常正常。现在我想当直接在浏览器中输入URL时,阻止对这些图像的访问。我看到过C#的解决方案,但找不到dotnet core的解决方案。

我正在使用中间件来拦截发送到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);
}

有谁能告诉我阻止直接访问图像并仅允许特定应用加载图像的最佳方法是什么?


我想在我的 .NET Core 应用程序中做类似的事情。您将 Task Invoke 函数放在哪里并从哪里调用它(如果有)。是在 Startup.cs 中吗? - dave317
1个回答

1

由于IIS的静态文件处理程序在请求到达.NET Core之前处理请求,因此静态文件的请求未能到达您的中间件。

只需从IIS的“Modules”功能中删除“StaticFileModule”(无论是针对您的.NET Core网站还是服务器级别),请求就可以传递。

以下是官方的.NET Core文档,其中提到了这一点:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations

编辑

根据文档:

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

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


谢谢回复!您说的“While removing the static file”是指删除UseFileServer吗?但这样做会导致上传文件夹对API不再可用?当通过浏览器直接调用URL(本地)时,它会命中if语句并返回401,但在浏览器中仍然显示图像。 - Tom Aalbers
不,我的意思是进入服务器上的IIS(inetmgr)(如果在开发中,则本地),转到网站,选择“模块”,然后删除“StaticFileModule”。所有这些都通过GUI完成。 - Richard Szalay
好的,我可以做到,但是在本地(通过dotnet cli)它会触发我的中间件,但我仍然无法阻止请求。你有任何想法为什么会这样吗? - Tom Aalbers
1
你的中间件需要在 UseStaticFiles 之前运行,并且如果你想要阻止它,就不要调用 next() 函数。 - Richard Szalay
你的最后一条评论是关键!谢谢! - Tom Aalbers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接