2012-05-12 16 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

Dangerous - フェッチするデータの量に制限を設けていないため、敵対的なユーザーはマルチテラバイトのダウンロードにつながるリンクを入れることができます。 curlはファイルへのダウンロードのストリーミングとフェッチ制限の両方をサポートしています –

+0

いくつかのコードを追加;) – Jeroen

+0

ありがとう、私は実際にこれを私のローカルアップロードスクリプトに指摘し、重複検証スクリプトをコードしません。 – domino

関連する問題