우리는 사용자가 파일을 업로드 할 수있는 웹 앱을 개발 중입니다. 그러나 저장 공간이 제한되어 있으므로 이러한 파일을 VPS에 저장할 수 없으므로 S3를 사용하기로 결정했습니다.
주요 문제는 사용자가 자신의 데이터에만 액세스 할 수 있도록해야한다는 것입니다. 따라서 데이터베이스에 파일 목록과 해당 파일에 액세스 할 수있는 사용자 목록을 유지합니다. 서버는 사용자가 파일에 액세스 할 수 있는지 여부를 쉽게 결정할 수 있습니다. 그러나 실제로 파일을 사용자에게 제공하는 방법은 무엇입니까?
내가 이미 고려한 몇 가지 가능성이 있지만 실제로 가장 좋은 것은 없습니다.
1. PHP로 서명 된 URL 생성 (만료)
이것은 정말 간단한 접근 방법이며 빠르지 만 매우 추악하고 긴 URL을 생성합니다.
2. 난독 화 된 URL
즉, S3에서 읽을 수 있도록 파일을 공개로 유지하지만 모든 파일은 다음과 같은 명명 된 폴더를 추측하기 어렵게 저장됩니다 24fa0b8ef0ebb6e99c64be8092d3ede20000
. 그러나 이것이 가장 안전한 방법은 아닙니다. 폴더 이름을 추측 할 수 없더라도 (실제로 액세스 할 수 있기 때문에) 폴더 이름을 알고 나면 다른 사람 (권한이없는 사람과)과 해당 링크를 공유 할 수 있습니다.
3. 서버를 통해 파일을 다운로드하십시오
이는 파일이 S3에 의해 직접 제공되지 않지만 먼저 서버가 파일을 안전하게 읽고 제공한다는 의미입니다. 우리는 정말로 이것을 원하지 않습니다 :)
4. 리퍼러 확인
난독 화 된 URL 솔루션은 요청 (당신이 참조 페이지를 확인 S3를 설정할 수 있습니다) 우리의 서버에서 온다 "확실하게"에 의해 개선 될 수있다. 그러나 모든 브라우저가 리퍼러 데이터를 전송하는 것은 아니며 가짜 일 수도 있기 때문에 이는 매우 신뢰할 수없는 솔루션입니다.
다른 클라이언트에 대해 Amazon S3의 파일을 안전하게 제공하는 좋은 방법은 무엇입니까?