題:
當我們擁有支持HSTS的瀏覽器時,為什麼要在所有地方都使用HTTPS?
GypsyCosmonaut
2017-04-26 01:49:05 UTC
view on stackexchange narkive permalink

我知道,當未明確提及 https:// 時,瀏覽器訪問任何站點的默認協議是 http:// ,但是即使這樣我們瀏覽到一個說 www.facebook.com 的網站,來自Facebook服務器的響應標頭會提到 HSTS,而我們的瀏覽器會從 http:// direct>代碼>到 https:// ,那麼當瀏覽器本身為用戶執行此操作時,為什麼我們需要另一個插件來執行此操作?默認情況下, HTTPS無處不在的作用是什麼?

HTTPS Everywhere早於HSTS。儘管下面的答案確實說明了為什麼它現在仍然有用,但是請不要忘記,接受和發布提案要花很長時間,然後又要廣泛使用它。
因為如果有人鏈接到HTTPS網站上`http:// not-safe-for-work.com`上的圖像,並且`not-safe-for-work.com`不使用HSTS,則不好事情發生
HTTPS Everywhere主要是圍繞“具有有效HTTPS版本但不進行廣告宣傳的網站”的用例設計的。過去,甚至Google都在“ encrypted.google.com”上提供了HTTPS版本。從其提交日誌和規則集大小可以看出,啟用了HTTPS但未從HTTP /使用HSTS重定向到HTTPS的網站的數量並不是很小。
-1
八 答案:
Lie Ryan
2017-04-26 07:35:26 UTC
view on stackexchange narkive permalink

HSTS使用首次使用信任模型。如果您與該站點的第一次連接已受到威脅,則可能不會在後續請求中收到HSTS錯誤。

HTTPS Everywhere會堵塞此漏洞,方法是讓您的瀏覽器知道該站點是HTTPS唯一的站點,

另外,即使某些網站支持HTTPS,也不會發布HSTS標頭。或者他們的HTTPS可能位於其他域/路徑中(例如, http://www.example.com https://secure.example.com ), HTTPS Everywhere嘗試通過重寫站點的URL來解決這些情況。

當插件不知道用戶正在訪問的網站的子域時,如何重寫URL?
@GypsyCosmonaut HTTPS Everywhere已與其數據庫連接。擴展程序可以重寫和重定向URL,添加和刪除腳本。這就是為什麼您必須小心信任哪個擴展。
HSTS預加載也會在首次使用漏洞上插入信任,但是如果網站不宣傳HSTS,則它*不能*成為HSTS預加載的候選人。因此,這是HSTS未涵蓋的HTTPS Everywhere瀏覽器擴展所涵蓋的另一方面。
作為記錄,可以在https://www.eff.org/https-everywhere/atlas/上瀏覽HTTPS Everywhere數據庫的所有條目。當前在請求之前添加“安全”的示例是https://www.eff.org/https-everywhere/atlas/domains/mbl.is.html
tim
2017-04-26 01:59:47 UTC
view on stackexchange narkive permalink

HTTPS Everywhere在客戶端,HSTS在服務器端。

因此答案是,在服務器未設置HSTS標頭的情況下,HTTPS Everywhere可以為您提供保護。

我相信HTTPS Everywhere如果使用`http`,也會嘗試升級頁面加載的資源。
同樣,除非您已經通過HTTPS訪問站點,否則將忽略HSTS標頭。
要澄清的是,雖然從服務器端設置了HSTS,但要由客戶端來尊重它。
@SamDufel是的,但這就是在服務器端進行預加載的目的。
@korockinout13是的,這是正確的。我的回答主要集中在“誰採用了這種防禦機制”上,因為我認為這是最相關的。
A.Jesin
2017-04-30 00:42:33 UTC
view on stackexchange narkive permalink

即使我們瀏覽到一個說www.facebook.com的網站,來自Facebook服務器的響應標頭也會提到HSTS

我做了一個 curl 請求到 http://www.facebook.com ,這就是我得到的:

  < HTTP / 1.1 302 Found<位置:https:/ /www.facebook.com/<內容類型:文本/ html< X-FB-調試:zgK / A + 8XSlghi / vWvAivsZ04gawpdr + 3BuO7yuQaKDdrP / + B14oSVDSreHh0GbchyNPnav39pQq9Zgw5mSXX5A == <日期:星期六,2017年4月29日19時23分25秒GMT<連接:keep-alive<內容長度:0  

您可以看到這裡沒有HSTS標頭,因為根據其規範(RFC6797)

HSTS主機不得在通過非安全傳輸傳遞的HTTP響應中包括STS頭字段。

Web瀏覽器也將忽略HSTS頭在HTTP響應中:

注意:使用HTTP訪問您的網站時,瀏覽器會忽略ict-Transport-Security標頭;這是因為攻擊者可能攔截HTTP連接並註入標頭或將其刪除。通過HTTPS訪問您的網站且沒有證書錯誤時,瀏覽器會知道您的網站具有HTTPS功能,並且會遵守Strict-Transport-Security標頭。

HSTS的目的是告訴客戶端通過HTTPS訪問網站後就不要切換到HTTP,反之亦然。來自 Wikipedia

HTTP嚴格傳輸安全性(HSTS)是一種網絡安全策略機制,有助於保護網站免受協議降級攻擊和cookie劫持。

協議降級攻擊

降級攻擊是對計算機系統或通信協議的一種攻擊形式,它使其放棄高質量的操作模式(例如,加密連接),而轉而使用較舊的較低質量的操作模式(例如,清除)文本),以便與舊系統向後兼容。

因此,HSTS標頭不用於將新的HTTP連接重定向到HTTPS,而是用於防止瀏覽器發出HTTP請求

另一方面, HTTPS Everywhere插件可確保網絡瀏覽器與支持HTTPS的網站建立HTTPS連接,但也可以通過HTTP進行訪問。

p>

Web上的許多站點對基於HTTPS的加密提供了一些有限的支持,但使它難以使用。例如,它們可能默認為未加密的HTTP,或使用返回到未加密站點的鏈接來填充加密頁面。 HTTPS Everywhere擴展通過使用巧妙的技術將對這些站點的請求重寫為HTTPS來解決這些問題。

Peter Green
2017-04-26 23:12:53 UTC
view on stackexchange narkive permalink

HSTS由網站運營商酌情決定。他們必須確定強制HTTPS的安全性優勢是否值得額外的服務器負載,阻止無法使用HTTPS的用戶以及使緩存代理無效。強制HTTPS是HSTS的先決條件。

許多站點可選地提供HTTPS,但是通常由最終用戶而不是提供鏈接或URL的人來選擇是否使用HTTPS。 HTTPS Everywhere允許用戶在此類站點上使用HTTPS,即使鏈接或鍵入的URL使用HTTP。用於“ HTTPS無處不在”,但直到/除非所有提供HTTPS的站點都這樣做,否則它將仍然是一個有用的插件。

Peter Taylor
2017-04-27 18:53:58 UTC
view on stackexchange narkive permalink

問題在於錯誤的前提。

...如果我們瀏覽到說www.facebook.com的網站,則來自Facebook服務器的響應標頭將提及HSTS,而我們的瀏覽器會將我們從 http:// 定向到 https:// ...

不是真的*。儘管 Strict-Transport-Security 標頭是HTTP標頭,但是HSTS規範要求服務器僅將其包括在通過加密通道發送的響應中,並且要求客戶端在通過非加密通道發送的響應中忽略它-加密的頻道。摘自 RFC 6797

HTTP嚴格傳輸安全性主機:是符合標準的主機,用於實現HSTS策略的HTTP服務器方面。這意味著HSTS主機在通過安全傳輸發送的HTTP響應消息中返回“ Strict-Transport-Security” HTTP響應標頭字段。

...

HTTP主機聲明通過向UA發出HSTS策略來使自身成為HSTS主機,該策略由Strict-Transport-Security HTTP響應頭字段表示並通過安全傳輸(例如TLS)進行傳輸。

...

HSTS主機不得在通過非安全傳輸傳送的HTTP響應中包括STS頭字段。

...

如果通過非安全接收到HTTP響應傳輸,UA必須忽略任何當前的STS標頭字段。


*好,我排除了Facebook服務器和您的瀏覽器都違反HSTS規範的可能性。確實,配置良好且帶有HSTS的服務器通常也將配置為不偵聽端口80或將永久重定向發送到HTTPS URL。但是請參閱RFC的7.2節中的限制。

seanieb
2017-04-26 09:31:18 UTC
view on stackexchange narkive permalink

許多域沒有正確配置HSTS。例如,Google在www.google.com及其子域上擁有HSTS,但在google.com及其子域上卻沒有。因此,訪問 https://google.com https://www.google.com

Google進行此類設置的原因很複雜。要進入Chrome HSTS預加載列表,必須具有域及其子域的HSTS。我認為Google有一些內部服務,也許是面向公眾的服務,無法通過HTTPS運作。因此,針對Google.com所有子域的HSTS都會中斷這些服務。所有www.google.com域的HSTS實際上僅覆蓋www.google.com,因為它在* .www.google.com上沒有任何子域。

但是,HTTPS Everywhere的規則要比允許此類複雜用例的HSTS複雜得多。

您的第一段包含了可接受的答案,第二段暗示了一些內容,但從未解釋過-您能否在最後一個陳述中進行擴展?
我不同意。該答案涵蓋了子域,在某些方面,www並不是正常的子域。雖然我可以改善答案,但兩段都相關。
那麼,例如,用於重定向未配置子域的複雜規則?您的最後一句話只是掛在那裡...
user2428118
2017-04-27 23:22:42 UTC
view on stackexchange narkive permalink

我發現HSTS預加載還沒有任何答案。總結一下:現有答案中提到的警告,例如@ Lie Ryan的:

HSTS使用首次使用信任模型。如果您與該站點的第一次連接已受到威脅,則後續請求可能不會收到HSTS錯誤。

(…)

此外,某些網站沒有廣告HSTS標頭即使它們支持HTTPS。

不適用於預加載的網站;也就是說,它們位於網絡瀏覽器內置的列表中。就像使用HTTPS Everywhere一樣,此列表中的網站即使在第一次訪問時也始終會重寫為HTTPS。

因此,HTTPS Everywhere的維護者已經決定預加載列表不會添加到HTTPS Everywhere的URI數據庫中(也可能會從HTTPS Everywhere的數據庫中刪除)。

Neith
2017-04-26 21:32:22 UTC
view on stackexchange narkive permalink

我專門為Stack Exchange本身使用HTTPS Everywhere。上次我檢查(幾個月前)時,它沒有使用HSTS,甚至沒有從HTTP重定向到HTTPS。但是,它確實提供了HTTPS,因此該附件使我免於潛在的竊聽。

對於Stack Exchange,情況現在可能已經改變。

Stack Exchange僅在登錄頁面上使用HTTPS,而不在整個網站上使用。這樣可以節省額外的開銷,因此有助於更快地加載頁面。HTTPS Everywhere無法執行任何操作。
我剛剛檢查了@GypsyCosmonaut,stackoverflow.com主頁的http和https版本都可用。
(@GypsyCosmonaut)最近幾乎在所有地方都使用https的堆棧:https://meta.stackexchange.com/questions/292058/network-wide-https-its-time
@dave_thompson085是的,注意到現在,我很糟糕
只需記住在登錄Area51之前在所有位置禁用HTTPS!無論出於什麼原因,那裡都不支持它。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...