我正在开发一个完全落后于SSL的网站。会员可以发布包含文本,youtube vids,soundcloud声音和外部图像的配置文件。我有一个过滤器来删除所有iframe,js等,并格式化youtube和soundcloud播放器以使用https。我不确定如何处理通常托管在非ssl域上的图像。我的第一个想法是创建一个代理系统来获取图像并通过本地ssl提供它。然而,我一起敲打测试的系统不起作用!
基本上所有外部网址都会像../external/?url=http://www.somedomain.com
一样进行过滤。这包括外部图像URL。然后他们被传递给了这个;
public function index() {
$url = $this->input->get('url', TRUE);
$data = FALSE;
$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);
$type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$responce = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$sub_type = explode('/', $type); // so we return just image instead of e.g. image/jpg
if ($type == 'text/html') {
redirect($url);
} else if ($sub_type[0] == 'image') {
header('Content-type: ' . $type);
echo $data;
}
}
这不是安全地提供外部图像,所以我需要什么?这也是最好的方法吗?我不想从我的服务器下载和提供所有外部图像。
最终目标是使此功能检查内容是否存在(而不是404),并可能探测外部文件以尝试确保它不是恶意的。现在虽然我只是希望它通过ssl提供文件,除非这是一个非常糟糕的主意。