2011-02-06 8 views
0

무엇이 더 좋습니까? 워드 문서, pdfs, 스캔 한 이미지 등의 사용자 문서를 데이터베이스 또는 폴더에 저장할 수 있습니다. 보안은 가장 중요한 문제입니다. 나는 누군가가 domain.com/user/social/profile/user_images/23432434.png와 같은 것을하고 그것을 볼 수 있기를 원하지 않는다.사용자가 업로드 한 문서를 phymyadmin에 저장하는 것이 더 좋습니까? 아니면 폴더에 저장하는 것이 더 좋습니까?

감사합니다.

+3

phpmyadmin은 데이터베이스가 아닌 프론트 엔드입니다. –

답변

1

보안이 중요한 문제인 경우 .htaccess를 사용하고 콘텐츠 폴더에 대한 공용 액세스를 닫습니다.

1

공용 폴더 (응용 프로그램이있는 문서 루트 폴더) 뒤에 자산을 저장하고 http://myapp.com/assets.php?id=13 (assets.php가 파일을 가져 와서 해당 내용을 출력하는 것)으로 가져올 수 있습니다. (여기서

  • 루트 폴더
    • 으로 public_html (스크립트가 자리하고있는 곳)
    • 자산 : 이제 assets.php에서

      , 당신은 역할, 등 등 예를 들어 같은

      을 확인할 수 있습니다 귀하의 업로드 거짓말, 그들은 대중의 눈에 접근 할 수 없을거야 그리고 누군가가 assets.php를 호출하면 그들을 당길 수

1

DB 또는 HD에 저장하는 경우 실제로 처리하지 않습니다. 중요한 것은 파일을 제공하는 방법입니다.

이 목적으로 모든 종류의 해시 함수를 사용할 수 있습니다. DB에서 각 사용자에게

  1. 추가 "소금"필드
  2. 당신은 예를 들어, MD5 (MD5 ({파일 이름}). 소금)

해당 파일을 검색하는 prety 힘들 것입니다 위해 할 수있는 captcha와 결합하면됩니다.

+0

DB에 저장하면 document.pdf로 저장됩니다. 맞습니까? 그래서 내가하고있는 모든 것은 그것을 다운로드하기위한 링크를 보여주는 것입니다. – AAA

+1

데이터베이스에 BLOB (이진 대형 오브젝트)로 저장됩니다. 그런 다음 저장하기 전에 어떤 확장자인지 알고 있어야하며 mime 유형을 출력하는 것이 맞을 수도 있습니다. 개인적으로 나는 당신을 HDD에 저장하고 @allenskd 대답을 내 것과 결합하도록 제안 할 것입니다. – exus

2

데이터베이스에 파일을 저장하는 것이 종종 후회됩니다. 데이터베이스에만 파일 이름 또는 ID를 저장하십시오.

액세스를 방지하려면 파일을 DOCUMENT_ROOT 외부에 저장하십시오. 액세스를 처리하는 랩퍼 스크립트를 작성하고 readfile() 또는 X-Sendfile:을 호출하십시오. (기본적으로 SQL 저장 자원에 대해 동일하게 수행했을 것입니다.)

+0

나는 새로운 것이므로 왜 후회할 지 모른다. 구체적인 예가 있습니까? – AAA

+1

@AAA : 이는 관리 오버 헤드에 관한 것입니다. 더 중요한 것은 이것이 한 번만 심각한 성능 저하입니다. – mario

1

파일을 서버의 루트 위에 저장하십시오.

예 :

/var/www/- 사용자의 서버 루트. 공개적으로 사용 가능합니다. /var/documents - 여기에 사용자 파일이 있습니다. 뿌리의 위 및 공개적으로 보이지 않는.

서버 문서 :

#add headers 
echo file_read_contents("/var/documents/file.doc"); 
1

/var/www/serve.php에서 SQL에서 파일 저장과 같은 느린 속도로 몇 가지 문제가 발생할 수 있습니다. 당신은 당신의 .htaccess에

# no one gets in here! 
deny from all 

를 사용하고 에코 file_get_contents ($ 파일 이름)를 사용할 수 있습니다; 또는 readfile ($ filename);

관련 문제