2012-11-09 2 views
2

사용자가 링크를 제출하고 해당 링크의 이미지를 축소판으로 사용하도록 지정하는 사이트를 개발 중입니다. 이미지는 사용자가 업로드하지 않고 웹 페이지에서 저장됩니다.외부 서버의 이미지를 안전하고 안전하게 저장합니다.

나는이 작업을 수행하는 두 가지 옵션이 있습니다 것 같다 그들은 file_get_contentscURL입니다

file_get_contents 예 :

$url = 'http://example.com/file_name.jpg'; 
$img = '/path/file_name.jpg'; 
file_put_contents($image, file_get_contents($url)); 

컬 예 : 안정성과 보안의 관점에서

$ch = curl_init('http://example.com/file_name.jpg'); 
$fp = fopen('/path/file_name.jpg', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

, 어느 쪽이 좋습니까? 현재 제공되는 방법을 사용하여 원격 파일을 가져 오는 보안 문제는 무엇이며 어떻게 보호 할 수 있습니까?

이 문제를 해결하는 클래스 나 함수가 있으면 Codeigniter를 사용하고 있습니다.

답변

2

신뢰성과 보안 측면에서 무엇이 좋습니까? 현재 제공되는 방법을 사용하여 원격 파일을 가져 오는 보안 문제는 무엇이며 어떻게 보호 할 수 있습니까?

글쎄, 우선, 이것은 요점은 사람들이 업로드하는 것을 허용하는 것보다 안전하지 않습니다. 조심하지 않으면 jimmyB가 malicious.js를 자신의 서버에 업로드 할 수 있습니다. 그러면 여러분의 방법 중 하나가 사이트의 파일을 제공하게됩니다.

이러한 방법을 사용하는 대신 CI의 파일 업로드 클래스를 고려하는 것이 좋습니다. 최종 결과는 서버에있는 파일로 끝나는 것입니다. CI의 파일 업로드에는 적어도 파일 형식에 대한 일부 내장 검사가 있습니다. 또한 CI의 XSS 필터링 및 내용을 활용할 수 있습니다. 는 사용자가 일을해야 뭔가 아니기 때문에

http://ellislab.com/codeigniter/user_guide/libraries/file_uploading.html

+0

나는 파일 업로드를 방지하고있다. 나는 그들이 이미지를 저장하고 업로드하는 것을 원하지 않는다. – Motive

+0

보안에 관해서는 파일이 단지 이미지이고 악의적 인 것을 포함하지 않도록하는 것이 중요합니다. – Motive

+0

codeigniters core/libraries/Upload.php 파일 (특히 MIME 유형 검사)을 살펴보십시오. 파일 확장자 (예 : jpg/png)를 사용하여 파일의 실제 유형을 결정할 수는 없습니다. 콘텐츠에 관한 한, A/V 소프트웨어로 스캔하는 것이 부족합니다. 참조 : http://stackoverflow.com/a/8638112/183254 – stormdrain

관련 문제