2012-07-03 10 views
3

일반적인 구조에 대한 업로드 폴더에 대한 가장 안전한 장소 : 나는 내가 [uploads] 폴더를 저장해야하는 위치에 대한 결정을하기 위해 노력하고있어웹 응용 프로그램, 사용자가 내 응용 프로그램의

[includes] - not accessible by the web 
.. important database classes, etc 
[public] 
.. all files that the application publicly uses 

. 이것은 모든 사용자 (등 이미지) 자신의 미디어 현재

[uploads] 
    [user123] 
     mypic.jpg 
     mysecondpic.jpg 
    [user456] 
     picpic.jpg 
     yeah.jpg 

저장 될 곳, 내가 [public] 폴더에이 폴더를 가지고,하지만 어떤 이유로 나는 확신 아니에요이 바로 이곳입니다 ...

[includes] 폴더는 일반인이 액세스 할 수 없으므로 PHP 만 탐색 할 수 있습니다.

모범 사례를위한 귀하의 의견은 어떻습니까?

+0

어떤 방식 으로든 미디어 보안에 민감합니까? –

+0

@Pekka, 아니, 그렇게 생각하지 않아. 그러나 내가 그들을 지키고 싶다면 무엇이 가장 좋은 구조일까요? – dcolumbus

+0

누구나'/ user123/mypic.jpg' 또는 user123에만 액세스 할 수 있습니까? –

답변

2

형제 디렉터리에 있습니다. 즉, includes/public/과 같은 레벨의 디렉토리입니다.

+0

예, 이것은 제가 생각한 것과 같습니다. 단점이 있습니까? – dcolumbus

+0

안전 모드 인 경우 예외 목록에 다른 경로를 추가해야합니다. 또한 해당 파일을 직접 제공 할 수도 없습니다. 하지만 그게 mod_sendfile을위한 것입니다. –

+0

https://tn123.org/mod_xsendfile/? – dcolumbus

0

달성하려는 목표에 따라 다릅니다. 사용자 기사의 예제 사진을 업로드하는 경우 /public/images과 같이 공개적으로 볼 수있는 폴더에 이미지를 업로드하십시오 (이미지는 어느 방식 으로든 볼 수 있습니다). 반면에 업로드 된 파일의 이익을 얻을 수있는 응용 프로그램을 만드는 경우 (예 : /uploads과 같이) 파일을 한 단계 위로 올려 놓는 것이 좋습니다. 그러면 공개적으로 액세스 할 수 없지만 코드를 만들 수 있습니다 그러면 다운로드가 가능해집니다.

+0

글쎄, 브라우저가 이러한 이미지를 가져올 수 있어야합니다. 응용 프로그램의 요점은 사용자가 다른 사람들에게 보낼 수있는 "프리젠 테이션"을 디자인 할 수있게하는 것입니다 . – dcolumbus

+0

대소 문자 구분은 간단합니다 : 공개 파일은'web/X' 또는'public/X'로 이동합니다. 분명히 몇 가지 htaccess 마법을 만들 수 있지만 권장하지 않습니다. –

+0

그래서 공개적으로 소비되는 인터페이스에 이러한 이미지를 가져와야하는 경우 "공개"디렉토리와 동일한 레벨 또는 그 이상의 "업로드"디렉토리를 가질 수 없습니까? – dcolumbus

0

나는 그 사용자 만 가정합니다. 내 말은, 미디어를 대화에 "공유"하지 않고 ... 가능한 길 아래에있는 것입니다. 이 경우

는, 일반적인 설정은

  • 장소입니다합니다 (public 폴더 외부 즉 - 정확히, 정말 당신에게 달려 있습니다.) 웹 루트 외부 파일

  • 모든 것이 체크 아웃되면 사용자 권한을 확인하고 요청 된 파일을 통과하는 PHP 스크립트를 작성하십시오. 즉, PHP 스크립트는 다음과 같이 모든 리소스에 대해 호출됩니다 :

    domain.com/resource.php?user=user123 & 파일 = mypic.jpg

    (또는 꽤 URL 재 작성을 사용)

그러나 이것은 모든 요청한 리소스에 대해 비싼 PHP 프로세스를 시작해야한다는 것을 명심하십시오. 요청을 최소화하기 위해 매우 영리한 캐싱을 사용해야합니다.

X-Sendfile이라는 이름의이 프로세스를보다 효율적으로 만드는 Apache 및 nginx 모듈이 있습니다. 길을 내려다 볼 가치가 있을지도 모릅니다.

+0

유일한 관심사는 대중이 미디어를 "볼"수 있는지 여부입니다. 이미지는 대중이 프레젠테이션의 일부로 볼 수있는 인터페이스로 전달됩니다. – dcolumbus

+0

@ dcolumbus 그래서 파일은 user123뿐만 아니라 모든 세계에 접근 가능해야합니까? 그건 네가 위에서 말한 것이 아니야? –

+0

결국 파일은 공개적으로 볼 수 있지만 user123이 만든 인터페이스를 통해서만 볼 수 있습니다. – dcolumbus

관련 문제