2017-01-29 1 views
1

(aurelia) 응용 프로그램의 업로드 폴더를 여는 dotnet core API (IIS8에서)를 설정했습니다. 나는 응용 프로그램이 URL을 통해 응용 프로그램에서 업로드 된 이미지를 열 수있는이 잘 작동이Dotnet core : 브라우저를 통해 이미지에 대한 직접 액세스를 차단하는 가장 좋은 방법은 무엇입니까?

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

처럼 해당 폴더에 대한 액세스 권한을 열었습니다. 이제 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에 도달하기 전에 요청을 처리하기 때문에 정적 파일에 대한 요청이 처리되지 않습니다.

IIS의 "모듈"기능 (.NET Core 웹 사이트 또는 서버 수준 용)에서 "StaticFileModule"을 제거하면 요청을 처리해야합니다. 워드 프로세서에 따르면 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations

편집

:

여기이 언급 공식 .NET의 핵심 문서의

를 IIS 정적 파일 핸들러가 활성화되고 ASP됩니다. NET 코어 모듈 (ANCM)이 올바르게 구성되지 않았습니다 (예 : web.config가 배포되지 않은 경우). 정적 파일이 제공됩니다.

실제로 위에서 언급 한 것과 반대입니다. 정적 파일 처리기를 제거하더라도 문제가 해결되면 ANCM 구성도 확인해야합니다.

+0

답장을 보내 주셔서 감사합니다. 그래서 '정적 파일을 제거하는 동안'당신은 'UseFileServer'을 제거한다고 말합니까? 그렇다면 더 이상 업로드 폴더를 사용할 수 없습니까? 브라우저에서 직접 if (if 문은 if 문을 호출하고 401을 반환하지만 브라우저에서는 여전히 이미지를 표시 함) 직접 호출합니다. –

+0

아니요, 서버에 IIS (inetmgr)로 들어가거나 (dev에있는 경우 로컬로) 웹 사이트로 이동하여 "모듈"을 선택하고 "StaticFileModule"을 제거하십시오. 모두 GUI를 통해. –

+0

좋아요, 제가 할 수는 있지만 로컬로 (dotnet cli를 통해) 내 미들웨어를 공격하지만 여전히 요청을 차단할 수는 없습니다. 왜 그런지 알기나 해? –

관련 문제