【问题标题】:Safely upload/download images via URL通过 URL 安全地上传/下载图像
【发布时间】:2012-08-29 16:49:39
【问题描述】:

所以,我想从 URL 安全地下载图像。当然,我的第一个想法是检查扩展 - 如果它兼容,只需下载它并使用好的扩展保存它(它应该是安全的,因为服务器不会运行存储在 .jpg 文件中的 PHP 代码(嗯,除非它被配置为这样做))。使用这种方法是否还有一些风险,是否有更好的方法?

【问题讨论】:

  • 当你说“安全”时,你关心的是什么?
  • 我担心用户可能会下载可执行文件或图像并利用漏洞来控制服务器。
  • 这是一个合理的担忧吗?

标签: php image download


【解决方案1】:
/* 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() 更多信息here

这应该可以帮助您使用 php 通过 url 下载任何内容。 关于上传?您想将文件保存在某处还是什么?

【讨论】:

  • 我想你不明白。我已经使用过 file_get_contents (我可以使用 curl 但当时似乎没有任何区别,所以只是为了相处和测试..)。从 url 下载数据不是问题。问题是要做到安全 - 我的意思是我希望它只用于图像,所以我解析了扩展链接,我用相同的扩展名保存它(只允许图像扩展),但它足够安全还是我应该检查一些东西还有吗?通过安全,我当然不希望有人破解它并上传 php shell 或其他可能危险的东西。
【解决方案2】:

你应该检查它是否是一个图像,因为扩展是可以被操纵的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2014-03-26
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多