通过URL安全上传/下载图片

3

我想安全地从URL下载图片。 我首先的想法当然是检查扩展名 - 如果兼容,就下载它并将其保存到正确的扩展名(应该是安全的,因为服务器不会运行存储在 .jpg 文件中的PHP代码(好吧,除非配置为这样做))。 还有其他更好的方法吗?使用这种方法是否仍存在风险?


当你说“安全地”时,你关心什么? - Marcus Adams
我担心用户可能会下载一个带有漏洞的可执行文件或图像,以获取对服务器的控制。 - Ben
这是一个合理的担忧吗? - Ben
2个回答

0

你应该检查一下它是否为图片,因为扩展名是可以被篡改的。

$file = file_get_contents($url);
if(@imagecreatefromstring($file)) { 
  // it's a valid image file; handle it
}
else {
  // it's not an image file; error!
}

0
/* gets the data from a URL */
function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

要获取文件信息,您可以使用curl_getinfo()。 更多信息在这里

这应该可以帮助您使用PHP通过URL下载任何内容。 至于上传?您想将文件保存在哪里?


1
我认为你不理解。我已经使用了file_get_contents(好吧,我可以使用curl,但当时似乎没有任何区别,所以只是为了顺利进行测试)。从URL下载数据不是问题。问题是要安全地执行它 - 我的意思是我希望它仅用于图像,因此我解析链接以获取扩展名,并将其保存为相同的扩展名(仅允许图像扩展名),但这是否足够安全,或者我还应该检查其他内容?而且,通过安全,我当然是指我不希望有人黑掉它并上传php shell或其他可能危险的东西。 - RippeR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接