0

我正在开发一个完全支持 SSL 的网站。成员可以发布包含文本、youtube 视频、soundcloud 声音和外部图像的个人资料。我有一个过滤器来删除所有 iframe、js 等,并格式化 youtube 和 soundcloud 播放器以使用 https。我不确定如何处理通常托管在非 ssl 域上的图像。我的第一个想法是制作一个代理系统来获取图像并通过本地 ssl 提供它。但是我拼凑起来测试的系统不起作用!

基本上所有外部 URL 都会像这样被过滤../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 提供文件,除非这是一个非常糟糕的主意。

4

0 回答 0