【问题标题】:Downloading remote image via php (securely)通过 php 下载远程图像(安全)
【发布时间】:2012-05-12 22:02:09
【问题描述】:

PHP:

有什么想法可以找到类似于 stackoverflow 使用的脚本吗?或者我自己做这样的东西容易吗?我确定下载图像不是问题,但我更担心安全性。我正在构建一个用户头像上传/远程上传系统。

jquery:

之所以我将jquery添加到标签中,也许可以让用户指向图像的URL并以某种方式通过正常的文件上传输入自己上传(无需先手动将图像下载到计算机)

【问题讨论】:

标签: php jquery


【解决方案1】:

您可以使用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!
} 

【讨论】:

  • 危险 - 您没有对要获取的数据量设置任何限制,因此恶意用户可以输入导致数 TB 下载的链接。 curl 支持将下载流式传输到文件,以及获取限制
  • 谢谢,我实际上可以将它指向我的本地上传脚本,而不是编写重复的验证脚本。
  • 你能再解释一下吗?假设 $url 是用户发送的 url。在您的示例中,我只需要将 image.jpg 替换为 $url?我问的原因是因为 URLOPT_URL 似乎也包含一个变量。
  • 不,$url 是用户提供的图片,image.jpg 是您要保存到的文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
相关资源
最近更新 更多