すべて SSL の背後にあるサイトを開発しています。メンバーは、テキスト、YouTube 動画、soundcloud サウンド、および外部画像を含むプロフィールを投稿できます。すべての iframe、js などを削除し、https を使用するように youtube と soundcloud プレーヤーをフォーマットするフィルターを用意しています。通常、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を介してファイルを提供したいだけです。