2012-05-12 5 views
1

PHP :PHP를 통해 원격 이미지 다운로드 (안전하게)

어떤 아이디어가 내가 stackoverflow와 비슷한 스크립트를 찾을 수 있습니까? 아니면 저 자신과 같은 것을 만드는 것이 쉬울까요? 나는 이미지를 다운로드하는 것이 문제가 아니지만 보안에 대해 더 걱정한다고 확신한다. 사용자 아바타 업로드/원격 업로드 시스템을 구축 중입니다.

JQuery와 :

내가 태그에 jQuery를 추가 한 이유는, 아마도 수동으로 다운로드 할 필요없이 사용자가 포인트를 이미지의 URL을하자 어떻게 든 정상 파일 업로드 입력 자신 (을 통해 업로드 할 수 있습니다

+0

??? 당신의 도전은 정확히 무엇입니까 ??? – Baba

+0

가능한 [서버에서 파일 가져 오기, PHP GD2로 크기 조정, 보안 고려 사항] (http://stackoverflow.com/questions/8606951/fetching-a-file-on-a-server-resizing-with-php) -gd2-security-considerations) – hakre

답변

2

cURL을 사용하여 이미지를 다운로드 한 다음 getimagesize()을 사용하여 실제로 이미지인지 (보안상의 이유로) 확인할 수 있습니다.

<?php 
$limit = 1024*1024*10 // Max. file size in bytes (1024*1024*10 = 10MB) 
$ch = curl_init(); 

$fh = fopen('image.jpg', 'w'); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FILE, $fh); 
curl_setopt($ch, CURLOPT_RANGE, '0-' . $limit); 

curl_exec($ch); 

curl_close($ch); 

if ($image = getimagesize ("image.jpg")) { 
    // It's an image 
} 
else { 
    // Not an image; delete! 
} 
+0

위험 - 가져올 데이터의 양을 제한하지 않기 때문에 적대적인 사용자는 멀티 테라 바이트 다운로드로 연결되는 링크를 넣을 수 있습니다. curl은 다운로드를 파일로 스트리밍하고 제한을 가져 오는 것을 지원합니다. –

+0

일부 코드를 추가했습니다.) – Jeroen

+0

고마워. 실제로이 파일을 로컬 업로드 스크립트로 복사 할 수 있으며 중복 확인 스크립트를 코딩 할 수는 없습니다. – domino

관련 문제