2010-03-21 4 views
2

직원이 파일을 업로드 할 수있는 시스템이 있습니다. 공공 개인 또는 보호 모드에서 내 계정에 세 가지 방법웹을 통한 파일 보안 : Fine Grained 권한 기반 파일 액세스

업로드, 공공 개인 또는 보호 모드에서 부서 계정에
업로드가있다
, 공공 개인 또는 보호 모드에서 조직 계정에 업로드

곳 공개는 그룹 또는 개인에게만 공개되고 조직의 모든 사람에게 보호되는 모든 사람에게 공개됩니다. 조직의

모든 파일이 말하는 디렉토리에 저장되어,/파일/<organizationId>/파일 서버에

같은

파일
+ - 234809
| + img1.jpg
| + doc1.pdf
+ - 808234
| + doc2.pdf

DB에 파일 경로 및 개인 정보 보호 수준을 저장하려고합니다. 따라서 특정 페이지의 사용자에게 파일 URL에 대한 링크를 표시할지 여부를 제어 할 수 있습니다.

문제는 파일의 URL을 제어 할 수 없다는 것입니다. 브라우저의 주소 표시 줄에 img1.jpg의 URL을 입력하면 로그인 한 사용자가 있는지 여부를 알 수 없습니다. img1.jpg를 볼 수있는 자격이 있습니다.

의견이 있으십니까?


Java 응용 프로그램입니다. 그러나 파일 서버로 작동하는 Glassfish의 별도 인스턴스가 있습니다. 앱이 아직 출시되지 않았으므로 더 나은 파일 액세스 전략을 채택 할 수 있습니다.

파일에 액세스하는 사용자가 로그인되어 있거나 로그인되지 않았을 수 있습니다.하지만 액세스중인 파일이 비공개 또는 공유 인 경우 로그인 페이지로 리디렉션하여 사용자를 인증 할 수 있습니다.

감사
Nishant

답변

1

당신은 흥미로운 질문을 제기하고 문제의 이해 올바른 것입니다.

콘텐츠를 제공하는 IIS의 버전에 따라 콘텐츠가 vdir 내에있는 경우 액세스 제어 권한조차 없을 수도 있습니다.

이러한 유형의 시나리오에 대한 일반적인 해결책은 인터넷에 액세스 할 수없는 디렉터리에 파일을 저장하고 보호 된 HttpHandler를 사용하여 파일을 스트리밍하는 것입니다.

몇 가지 방법이 있습니다. 가장 간단한 방법은 존재하지 않는 디렉토리 (/ downloads)에 매핑 된 HttpHandler를 사용하고 RequestUri에서 파일 이름을 파싱하고 적절한 콘텐츠 유형을 설정 한 다음 파일을 Response에 씁니다.

이 경우 HttpHandler가 보호되어 액세스를 확인할 수 있습니다.

+0

네, 이것은 깔끔합니다. 이 접근법에서 URL은 파일의 컨텍스트를 가질 것입니다. http://abc.com/downloads/[some-encrypted-key]/img1.jpg와 같이 HTTP 처리기는 사용자 자격 증명 및 키의 필수 권한을 기반으로 액세스 가능성을 추론합니다. 그러나 로봇은 여전히 ​​낮은 확률로 시도하고 계속 액세스 할 수 있습니다. 최근 내가 생각한 것은, img1.jpg와 같이 각 파일에 메타 데이터 파일을 첨부 할 수 있습니다. img1.md 파일이 있는데, 사용자가 파일에 액세스하면 Handler가 메타 데이터를 읽고 확인합니다. 그러나 파일 w/100 파일을 읽는 것은 고통 스러울 수 있습니다. – Nishant

+0

@Nishant - 사용중인 플랫폼과 '다운로드'에 액세스 할 사용자가 로그인으로 인증되고 거기에서 갈 수 있는지 질문에 명확히하십시오. –

+0

Java 응용 프로그램입니다. 그러나 파일 서버로 작동하는 Glassfish의 별도 인스턴스가 있습니다. 앱이 아직 출시되지 않았으므로 더 나은 파일 액세스 전략을 채택 할 수 있습니다. 파일에 액세스하는 사용자가 로그인 한 상태 일 수도 있고 로그인하지 않은 상태 일 수도 있습니다.하지만 액세스중인 파일이 비공개 또는 공유 인 경우 로그인 페이지로 리디렉션하여 사용자를 인증 할 수 있습니다. – Nishant

0

공용 폴더 외부에 파일을 저장할 수 있으며 조직에서 파일을 요청하는 URL을 잡기 위해 어떤 종류의 경로가있을 수 있습니다.그런 다음 웹 서버가 제어 할 필요없이 프로그래밍 방식으로 파일을 제공 할 수 있습니다.

+0

예, 우리가 그 일을 끝내 었습니다. – Nishant