問題描述
我將一些 HTML 加載到 iframe 中,但是當引用的文件使用 http,而不是 https 時,我會收到以下錯誤:
[blocked] The page at {current_pagename} ran insecure content from {referenced_filename}
有什麼辦法可以把它關掉還是以任何方式解決呢?
iframe 沒有 src 屬性,並且使用以下方式設置內容:
frame.open();
frame.write(html);
frame.close();
最佳解決方案
基於這個問題的一般性,我想,你需要在一些服務器上在線設置自己的 HTTPS 代理。執行以下步驟:
-
準備您的代理服務器 – 安裝 IIS,Apache
-
獲取有效的 SSL 證書以避免安全性錯誤 (例如,從 startssl.com 免費)
-
寫一個包裝器,這將下載不安全的內容 (如何下面)
-
從您的網站/應用程序獲取 https://yourproxy.com/?page=http://insecurepage.com
如果您只需通過 file_get_contents 或類似的方式下載遠程站點內容,您仍然可以向內容發送不安全的鏈接。你必須用正則表達式找到它們,並且替換它們。圖像很難解決,但是在這裏找到解決辦法:http://foundationphp.com/tutorials/image_proxy.php
次佳解決方案
我創建的最佳解決方案是簡單地使用 google 作為 ssl 代理…
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
測試和工作在 firefox 。
其他方法:
-
使用第三方,如 embed.ly(但它真的只對知名的 http API 有好處) 。
-
在您控制的 https 頁面上創建自己的重定向腳本 (相對鏈接頁面上的一個簡單的 JavaScript 重定向應該做到這一點):(可以使用任何 langauge /方法)
https://mysite.com有一個 iframe 鏈接到…https://mysite.com/utilities/redirect.html哪個有一個簡單的 js 重定向腳本,如…document.location.href ="http://thenonsslsite.com"; -
或者,您可以添加一個 RSS 提要或寫一些閲讀器/解析器來閲讀 http 站點並將其顯示在您的 https 站點中。
-
您可以/也應該向 http 站點所有者推薦他們創建一個 ssl 連接。如果沒有其他原因比 it increases seo 。
除非您可以讓 http 站點所有者創建一個 ssl 證書,否則最安全和永久的解決方案是創建一個 RSS feed 來獲取所需的內容 (可能你實際上並不是’doing’ 在 http 站點上的任何東西 – 也就是説不是登錄到任何系統) 。
真正的問題是在 https 站點中擁有 http 元素是一個安全問題。這個安全風險並不是完全猶豫的,所以以上只是目前的工作。
請注意,您可以在大多數瀏覽器中禁用此安全措施 (您自己,而不是其他瀏覽器) 。另請注意,這些’hacks’ 可能會隨着時間的推移而過時。
第三種解決方案
我知道這是一個老帖子,但另一個解決方案是使用 cURL,例如:
redirect.php:
<?php
if (isset($_GET['url'])) {
$url = $_GET['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);
echo $data;
}
然後在您的 iframe 代碼中,如下所示:
<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
這只是一個最小的例子來説明這個想法 – 它不會對 URL 進行清理,也不會阻止別人為了自己的目的使用 redirect.php 。在你自己的網站的上下文中考慮這些事情。
不過,上行空間更為靈活。例如,您可以添加 curl’d $數據的一些驗證,以確保它在顯示之前確實是您想要的 – 例如,測試以確保它不是 404,並且具有自己準備的備用內容是。
另外 – 我有點厭倦依靠 Javascript 重定向任何重要的東西。
乾杯!
第四種方案
嘗試在 https 頁面上顯示非安全內容時,您將始終會在大多數瀏覽器中收到阻止內容的警告。如果你想嵌入不在 ssl 後面的其他網站的東西,這很棘手。您可以關閉警告或刪除您自己的瀏覽器中的阻止,但對於其他訪問者,這是一個問題。
一種方法是加載內容服務器端,並將圖像和其他內容保存到服務器,並從 https 中顯示。
您也可以嘗試使用像 embed.ly 這樣的服務,並通過它們獲取內容。他們支持使內容落後於 https 。
第五種方案
在頭部加入<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
reference: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
browser compatibility: http://caniuse.com/#feat=upgradeinsecurerequests
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。