2010-03-03 3 views
4

ASP.Net MVC를 사용하고 있습니다. ASP 양식 인증을 사용하여 웹 사이트에 대한 액세스를 제한했습니다. 그러나 웹 페이지에는 서버에있는 PDF 파일에 대한 링크가 포함되어있어 보호를 받고 싶습니다.내 서버에서 pdf 파일에 대한 액세스를 어떻게 제한합니까?

예를 들어 사용자는 foo.com 및 foo.com/account/logon으로 이동할 수 있습니다. 일단 로그온하면 foo.com/category/bar에 액세스하여 bar.aspx에서보기를 표시합니다. 이보기에는 foo.com/files/theta.pdf에 대한 링크가있어 브라우저에 잘로드됩니다. 그러나 사용자가 인증하지 않으면 브라우저에서 foo.com/files/theta.pdf에 액세스 할 수 없습니다.

foo.com/account/logon에서 먼저 인증하지 않고 사용자가 브라우저에서 직접 foo.com/files/theta.pdf에 액세스하는 것을 방지하려면 어떻게해야합니까?

답변

7

컨트롤러를 통해 요청을 전달하고 FileResult을 반환하십시오. Authorize 특성을 사용하거나 컨트롤러 메서드 내에서 사용 권한을 확인하여 컨트롤러 메서드에 원하는 보안을 적용 할 수 있습니다.

이미지 파일을 반환하는 방법을 보여주는 this question에 이러한 코드의 예가 있습니다. 이미지 파일 대신 pdf를 반환하고 application/pdf을 MIME 유형으로 사용하십시오.

+0

감사합니다 : 이것은 당신이 주변 승인의 모든 종류를 가질 수 있습니다 바이너리 데이터를 다시 전송합니다. 컨트롤러를 변경하여 파일을 식별하는 매개 변수를 수락 한 다음 경로를 구성하고 FileResult를 반환했습니다. PDF를 표시 할 때 원하는 효과가있었습니다. 그러나 사용자는 여전히 전체 링크를 브라우저에 추가하여 불러올 수 있습니다. 나는 찰스가 제안한대로 웹 구성에 위치 요소를 추가하려고 시도했으나 트릭을하지는 못했습니다. 그러나 IIS 관리자를 사용하여 해당 폴더에 "거부"규칙을 추가하여 원하는 효과를 얻을 수있었습니다. 이제 사용자는 PDF를 직접 표시 할 수 없습니다. –

+0

'그러나 사용자는 여전히 브라우저에 전체 링크를 추가하고 불러올 수 있습니다. '- 그 이유는 컨트롤러 메소드에 Authorize 속성을 추가하여 적절한 역할에 할당 된 사용자에게만 액세스를 제한하는 것입니다. 사용자가 자신이 거부 된 URL을 입력하면 'FileResult'를 반환하는 대신 Login 또는 Unauthorized 페이지로 리디렉션 될 수 있습니다. 사용자가 지정한 역할에 따라 액세스를 허용하거나 거부하는 * 모든 * 컨트롤러 메소드에 추가 할 보안과 동일한 보안입니다. 더 많은 정보는 여기에 있습니다 : http://nerddinnerbook.s3.amazonaws.com/Part9.htm –

5

/files 디렉토리에 대한 모든 액세스를 제한하려면 에 location 요소를 사용하여 액세스를 제한하면됩니다.

예.

<location path="~/files"> 
    <system.web> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</location> 

나는 고급 보안 로버트 롭 동의 것을 추가해야하지만 단순한 솔루션을하려면이 트릭을 할해야합니다. :-)

HTHs,
찰스 내가 믿는

관련 문제