2012-11-09 60 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可以将恶意.js上传到他的服务器,然后你的任何一种方法都会在你的网站上提供他的文件。

我建议考虑CI的文件上传类,而不是尝试使用这些方法。无论哪种方式,最终结果都是以服务器上的文件结束;与CI的文件上传,至少有一些内置的文件类型等检查。你也可以利用CI的XSS过滤和东西。

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

+0

我避免了文件上传,因为它不是用户应该做的事情。我不希望他们保存图片并上传。 – Motive

+0

至于安全性,我的担心更多的是确保文件只是一个图像,并且不包含任何恶意内容。 – Motive

+0

看一下codeigniters的核心/库/ Upload.php文件(具体是MIME类型检查)。您不能依赖文件扩展名(例如jpg/png)来确定文件的实际类型。就内容而言,对于短时间使用A/V软件进行扫描,您所能做的并不多。请参阅http://stackoverflow.com/a/8638112/183254 – stormdrain