問題描述
我將一些 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。