2012-10-26 1 views
1

PHP를 안전하게 파일 업로드하고 해당 파일을 검색하는 것에 대해 혼란스러워합니다. 보안상의 이유로 업로드 된 이미지를 문서 루트 외부에 저장하라는 메시지가 표시됩니다. 업로드 할 수는 있지만 MYSQL 및 HTML 구조를 사용하여 이미지를 제공하는 것이 가장 좋은지 잘 모르겠습니다. 이것은 어리석은 방법 일 수 있지만 여기에 내 문제가 있습니다 :PHP MYSQL을 사용하여 문서 루트 외부에 저장된 이미지를 검색하는 방법은 무엇입니까?

내 문서 루트 내에 저장된 5 개의 이미지가 있습니다. 내 MYSQL 데이터베이스에서 해당 이미지에 대한 URL 경로 (예 : www.mywebsite.com/images/123.jpg)를 저장합니다. 내 HTML 인덱스는 MYSQL을 쿼리하고 이미지 경로를 선택한 다음 이미지의 모든 경로를 나열한 다음 이미지를 표시합니다.

그러나 이미지가 보안상의 이유로 문서 루트 외부에 저장되어 있습니다. MYSQL에 www.mywebsite.com/images/outofroot.jpg와 같은 URL 경로를 저장할 수있는 방법이 있습니까? 그런 다음 위와 같이 선택한 쿼리를 수행합니까?

+0

당신은 img src로 PHP 스크립트로 서버를 배치 할 것입니다. 스크립트는 루트 외부에서 액세스 할 수 있습니다. '' –

+0

나는 PHP에 조금 익숙하다. "PHP 스크립트로 서버를 처리하는 것"은 무엇을 의미합니까? script.php에 무엇이 있습니까? 그것이 "? image_id"와 어떤 관련이 있습니까? – user1441581

+0

이렇게하면 더 명확 해집니다. http://stackoverflow.com/questions/855135/best-way-to-limit-access-to-images-is-this-about-right –

답변

0

당신이 언급 한 이러한 전술 한 "보안상의 이유"가 무엇인지 궁금합니다. 분명히 할 수 있다면 정말 좋습니다.

내 PHP는 약간 녹슨입니다,하지만 난 당신이 JPEG이 같은 일을해야 기억하는 것과 :

header("Content-type: image/jpeg"); 
$img = imagecreatefromjpeg("/path/to/file.jpg"); 
imagejpeg($img); 

첫째로, 우리는 JPEG 이미지의 일치하도록 header을 설정합니다. 다음으로 이미지를 imagecreatefromjpeg으로 메모리에로드합니다. 마지막으로 우리는 이미지를 제공합니다 imagejpeg

이 예제는 사용 용도에 따라 jpeg에만 국한되며, 다른 유형이 필요할 수 있습니다. 당신은 다른 유형을 위해이 일을하기 위해 어떤 논리를 쓸 수 있습니다 (운동으로;)). 이 작업을 수행하는 방법은 PHP 설명서의 imagepng, imagegif 및 기타 항목을 확인하십시오.

보안 점검이 필요한 경우 (예 : 사용자가 사진을 볼 수있는 권한이 있어야 함) 작업 디렉토리 외부에 저장하고로드하는 것이 좋습니다.

그러나 게재중인 이미지에 액세스 권한 확인이 필요하지 않은 경우 중간 사람이 서비스를 제공하는 대신 정상적으로 서비스하는 것이 좋습니다.

+0

음, 사용자가 자신의 사진을 업로드하고 이미지를 공유하는 소셜 사이트를 시작합니다. 나는 이미지를 루트에서 저장하고 커뮤니티 구성원 만 볼 수있게 만드는 것이 좋은 보안 예방 조치라고 생각했습니다. 내가 작업 디렉토리 밖에서 사진을 저장해야한다고 생각합니까? – user1441581

+0

사람들이이 파일에 직접 액세스하지 못하도록 웹 서버에서 권한을 설정할 수 있지만 작업 디렉토리 외부에 파일을 저장하는 것이 훨씬 쉽고 오류가 적습니다. Apache를 사용하고 있고 작업 디렉토리 외부에 저장하지 않으려는 경우 이전에 이와 같은 상황을 처리하기 위해 게시 한 비슷한 문제가있었습니다. http://stackoverflow.com/questions/5605078/how-to -restrict-for-js-css-inside-a와 같은 특정 파일 유형에 대한 액세스 금지 – vtsatskin