午夜福利院在线观看免费,天堂最新版在线,色噜噜精品一区二区三区,无码一区二区三区中文字幕,丝袜美腿一区二区三区

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?

1. 緣起:?jiǎn)⒂肏TTPS也不夠安全

有不少網(wǎng)站只通過(guò)HTTPS對(duì)外提供服務(wù),但用戶在訪問(wèn)某個(gè)網(wǎng)站的時(shí)候,在瀏覽器里卻往往直接輸入網(wǎng)站域名(例如www.example.com),而不是輸入完整的URL(例如https://www.example.com),不過(guò)瀏覽器依然能正確的使用HTTPS發(fā)起請(qǐng)求。這背后多虧了服務(wù)器和瀏覽器的協(xié)作,如下圖所示。

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖
圖1:服務(wù)器和瀏覽器在背后幫用戶做了很多工作

簡(jiǎn)單來(lái)講就是,瀏覽器向網(wǎng)站發(fā)起一次HTTP請(qǐng)求,在得到一個(gè)重定向響應(yīng)后,發(fā)起一次HTTPS請(qǐng)求并得到最終的響應(yīng)內(nèi)容。所有的這一切對(duì)用戶而言是完全透明的,所以在用戶眼里看來(lái),在瀏覽器里直接輸入域名卻依然可以用HTTPS協(xié)議和網(wǎng)站進(jìn)行安全的通信,是個(gè)不錯(cuò)的用戶體驗(yàn)。

一切看上去都是那么的完美,但其實(shí)不然,由于在建立起HTTPS連接之前存在一次明文的HTTP請(qǐng)求和重定向(上圖中的第1、2步),使得攻擊者可以以中間人的方式劫持這次請(qǐng)求,從而進(jìn)行后續(xù)的攻擊,例如竊聽(tīng)數(shù)據(jù),篡改請(qǐng)求和響應(yīng),跳轉(zhuǎn)到釣魚(yú)網(wǎng)站等。

以劫持請(qǐng)求并跳轉(zhuǎn)到釣魚(yú)網(wǎng)站為例,其大致做法如下圖所示:

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖1
圖2:劫持HTTP請(qǐng)求,阻止HTTPS連接,并進(jìn)行釣魚(yú)攻擊
  • 第1步:瀏覽器發(fā)起一次明文HTTP請(qǐng)求,但實(shí)際上會(huì)被攻擊者攔截下來(lái)
  • 第2步:攻擊者作為代理,把當(dāng)前請(qǐng)求轉(zhuǎn)發(fā)給釣魚(yú)網(wǎng)站
  • 第3步:釣魚(yú)網(wǎng)站返回假冒的網(wǎng)頁(yè)內(nèi)容
  • 第4步:攻擊者把假冒的網(wǎng)頁(yè)內(nèi)容返回給瀏覽器

這個(gè)攻擊的精妙之處在于,攻擊者直接劫持了HTTP請(qǐng)求,并返回了內(nèi)容給瀏覽器,根本不給瀏覽器同真實(shí)網(wǎng)站建立HTTPS連接的機(jī)會(huì),因此瀏覽器會(huì)誤以為真實(shí)網(wǎng)站通過(guò)HTTP對(duì)外提供服務(wù),自然也就不會(huì)向用戶報(bào)告當(dāng)前的連接不安全。于是乎攻擊者幾乎可以神不知鬼不覺(jué)的對(duì)請(qǐng)求和響應(yīng)動(dòng)手腳。

2. 解決之道:使用HSTS

既然建立HTTPS連接之前的這一次HTTP明文請(qǐng)求和重定向有可能被攻擊者劫持,那么解決這一問(wèn)題的思路自然就變成了如何避免出現(xiàn)這樣的HTTP請(qǐng)求。我們期望的瀏覽器行為是,當(dāng)用戶讓瀏覽器發(fā)起HTTP請(qǐng)求的時(shí)候,瀏覽器將其轉(zhuǎn)換為HTTPS請(qǐng)求,直接略過(guò)上述的HTTP請(qǐng)求和重定向,從而使得中間人攻擊失效,規(guī)避風(fēng)險(xiǎn)。其大致流程如下:

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖2
圖3:略過(guò)HTTP請(qǐng)求和重定向,直接發(fā)送HTTPS請(qǐng)求
  • 第1步:用戶在瀏覽器地址欄里輸入網(wǎng)站域名,瀏覽器得知該域名應(yīng)該使用HTTPS進(jìn)行通信
  • 第2步:瀏覽器直接向網(wǎng)站發(fā)起HTTPS請(qǐng)求
  • 第3步:網(wǎng)站返回相應(yīng)的內(nèi)容

那么問(wèn)題來(lái)了,瀏覽器是如何做到這一點(diǎn)的呢?它怎么知道那個(gè)網(wǎng)站應(yīng)該發(fā)HTTPS請(qǐng)求,那個(gè)網(wǎng)站應(yīng)該用HTTP請(qǐng)求呢?此時(shí)就該HSTS粉墨登場(chǎng)了。

2.1 HSTS

HSTS的全稱是HTTP Strict-Transport-Security,它是一個(gè)Web安全策略機(jī)制(web security policy mechanism)。

HSTS最早于2015年被納入到ThoughtWorks技術(shù)雷達(dá),并且在2016年的最新一期技術(shù)雷達(dá)里,它直接從“評(píng)估(Trial)”階段進(jìn)入到了“采用(Adopt)“階段,這意味著ThoughtWorks強(qiáng)烈主張業(yè)界積極采用這項(xiàng)安全防御措施,并且ThoughtWorks已經(jīng)將其應(yīng)用于自己的項(xiàng)目。

HSTS最為核心的是一個(gè)HTTP響應(yīng)頭(HTTP Response Header)。正是它可以讓瀏覽器得知,在接下來(lái)的一段時(shí)間內(nèi),當(dāng)前域名只能通過(guò)HTTPS進(jìn)行訪問(wèn),并且在瀏覽器發(fā)現(xiàn)當(dāng)前連接不安全的情況下,強(qiáng)制拒絕用戶的后續(xù)訪問(wèn)要求。

HSTS Header的語(yǔ)法如下:

Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]

其中:

  • max-age是必選參數(shù),是一個(gè)以秒為單位的數(shù)值,它代表著HSTS Header的過(guò)期時(shí)間,通常設(shè)置為1年,即31536000秒。
  • includeSubDomains是可選參數(shù),如果包含它,則意味著當(dāng)前域名及其子域名均開(kāi)啟HSTS保護(hù)。
  • preload是可選參數(shù),只有當(dāng)你申請(qǐng)將自己的域名加入到瀏覽器內(nèi)置列表的時(shí)候才需要使用到它。關(guān)于瀏覽器內(nèi)置列表,下文有詳細(xì)介紹。

2.2 讓瀏覽器直接發(fā)起HTTPS請(qǐng)求####

只要在服務(wù)器返回給瀏覽器的響應(yīng)頭中,增加Strict-Transport-Security這個(gè)HTTP Header(下文簡(jiǎn)稱HSTS Header),例如:

Strict-Transport-Security: max-age=31536000; includeSubDomains

就可以告訴瀏覽器,在接下來(lái)的31536000秒內(nèi)(1年),對(duì)于當(dāng)前域名及其子域名的后續(xù)通信應(yīng)該強(qiáng)制性的只使用HTTPS,直到超過(guò)有效期為止。

完整的流程如下圖所示:

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖3
圖4:完整的HSTS流程

只要是在有效期內(nèi),瀏覽器都將直接強(qiáng)制性的發(fā)起HTTPS請(qǐng)求,但是問(wèn)題又來(lái)了,有效期過(guò)了怎么辦?其實(shí)不用為此過(guò)多擔(dān)心,因?yàn)镠STS Header存在于每個(gè)響應(yīng)中,隨著用戶和網(wǎng)站的交互,這個(gè)有效時(shí)間時(shí)刻都在刷新,再加上有效期通常都被設(shè)置成了1年,所以只要用戶的前后兩次請(qǐng)求之間的時(shí)間間隔沒(méi)有超過(guò)1年,則基本上不會(huì)出現(xiàn)安全風(fēng)險(xiǎn)。更何況,就算超過(guò)了有效期,但是只要用戶和網(wǎng)站再進(jìn)行一次新的交互,用戶的瀏覽器又將開(kāi)啟有效期為1年的HSTS保護(hù)。

2.3 讓瀏覽器強(qiáng)制拒絕不安全的鏈接,不給用戶選擇的機(jī)會(huì)####

在沒(méi)有HSTS保護(hù)的情況下,當(dāng)瀏覽器發(fā)現(xiàn)當(dāng)前網(wǎng)站的證書(shū)出現(xiàn)錯(cuò)誤,或者瀏覽器和服務(wù)器之間的通信不安全,無(wú)法建立HTTPS連接的時(shí)候,瀏覽器通常會(huì)警告用戶,但是卻又允許用戶繼續(xù)不安全的訪問(wèn)。如下圖所示,用戶可以點(diǎn)擊圖中紅色方框中的鏈接,繼續(xù)在不安全的連接下進(jìn)行訪問(wèn)。

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖4
圖5:瀏覽器依然允許用戶進(jìn)行不安全的訪問(wèn)

理論上而言,用戶看到這個(gè)警告之后就應(yīng)該提高警惕,意識(shí)到自己和網(wǎng)站之間的通信不安全,可能被劫持也可能被竊聽(tīng),如果訪問(wèn)的恰好是銀行、金融類網(wǎng)站的話后果更是不堪設(shè)想,理應(yīng)終止后續(xù)操作。然而現(xiàn)實(shí)很殘酷,就我的實(shí)際觀察來(lái)看,有不少用戶在遇到這樣的警告之后依然選擇了繼續(xù)訪問(wèn)。

不過(guò)隨著HSTS的出現(xiàn),事情有了轉(zhuǎn)機(jī)。對(duì)于啟用了瀏覽器HSTS保護(hù)的網(wǎng)站,如果瀏覽器發(fā)現(xiàn)當(dāng)前連接不安全,它將僅僅警告用戶,而不再給用戶提供是否繼續(xù)訪問(wèn)的選擇,從而避免后續(xù)安全問(wèn)題的發(fā)生。例如,當(dāng)訪問(wèn)Google搜索引擎的時(shí)候,如果當(dāng)前通信連接存在安全問(wèn)題,瀏覽器將會(huì)徹底阻止用戶繼續(xù)訪問(wèn)Google,如下圖所示。

什么是HSTS?網(wǎng)站開(kāi)啟HSTS的作用是什么?插圖5
圖6:瀏覽器徹底阻止用戶繼續(xù)進(jìn)行不安全的訪問(wèn)

3. 道高一尺魔高一丈:攻擊者依然有可乘之機(jī)

細(xì)心的你可能發(fā)現(xiàn)了,HSTS存在一個(gè)比較薄弱的環(huán)節(jié),那就是瀏覽器沒(méi)有當(dāng)前網(wǎng)站的HSTS信息的時(shí)候,或者第一次訪問(wèn)網(wǎng)站的時(shí)候,依然需要一次明文的HTTP請(qǐng)求和重定向才能切換到HTTPS,以及刷新HSTS信息。而就是這么一瞬間卻給攻擊者留下了可乘之機(jī),使得他們可以把這一次的HTTP請(qǐng)求劫持下來(lái),繼續(xù)中間人攻擊。

4. Preload List:讓防御更加徹底

針對(duì)上面的攻擊,HSTS也有應(yīng)對(duì)辦法,那就是在瀏覽器里內(nèi)置一個(gè)列表,只要是在這個(gè)列表里的域名,無(wú)論何時(shí)、何種情況,瀏覽器都只使用HTTPS發(fā)起連接。這個(gè)列表由Google Chromium維護(hù),F(xiàn)ireFox、Safari、IE等主流瀏覽器均在使用。

5. 一些Tips

Tips 1:如何配置HSTS

很多地方都可以進(jìn)行HSTS的配置,例如反向代理服務(wù)器、應(yīng)用服務(wù)器、應(yīng)用程序框架,以及應(yīng)用程序中自定義Header。你可以根據(jù)實(shí)際情況進(jìn)行選擇。

常見(jiàn)的是在代理服務(wù)器中進(jìn)行配置,以Nginx為例,只需在配置文件中加上下面這條指令即可:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

不過(guò)需要特別注意的是,在生產(chǎn)環(huán)境下使用HSTS應(yīng)當(dāng)特別謹(jǐn)慎,因?yàn)橐坏g覽器接收到HSTS Header(假如有效期是1年),但是網(wǎng)站的證書(shū)又恰好出了問(wèn)題,那么用戶將在接下來(lái)的1年時(shí)間內(nèi)都無(wú)法訪問(wèn)到你的網(wǎng)站,直到證書(shū)錯(cuò)誤被修復(fù),或者用戶主動(dòng)清除瀏覽器緩存。因此,建議在生產(chǎn)環(huán)境開(kāi)啟HSTS的時(shí)候,先將max-age的值設(shè)置小一些,例如5分鐘,然后檢查HSTS是否能正常工作,網(wǎng)站能否正常訪問(wèn),之后再逐步將時(shí)間延長(zhǎng),例如1周、1個(gè)月,并在這個(gè)時(shí)間范圍內(nèi)繼續(xù)檢查HSTS是否正常工作,最后才改到1年。

Tips 2:如何加入到HSTS Preload List

根據(jù)官方說(shuō)明,你的網(wǎng)站在具備以下幾個(gè)條件后,可以提出申請(qǐng)加入到這個(gè)列表里。

  • 具備一個(gè)有效的證書(shū)
  • 在同一臺(tái)主機(jī)上提供重定向響應(yīng),以及接收重定向過(guò)來(lái)的HTTPS請(qǐng)求
  • 所有子域名均使用HTTPS
  • 在根域名的HTTP響應(yīng)頭中,加入HSTS Header,并滿足下列條件:
    • 過(guò)期時(shí)間最短不得少于18周(10886400秒)
    • 必須包含includeSubDomains參數(shù)
    • 必須包含preload參數(shù)
      當(dāng)你準(zhǔn)好這些之后,可以在HSTS Preload List的官網(wǎng)上(https://hstspreload.org)提交申請(qǐng),或者了解更多詳細(xì)的內(nèi)容。

Tips 3:如何查詢域名是否加入到了Preload List

從提交申請(qǐng)到完成審核,成功加入到內(nèi)置列表 ,中間可能需要等待幾天到幾周不等的時(shí)間。可通過(guò)官網(wǎng)https://hstspreload.org或在Chrome地址欄里輸入chrome://net-internals/#hsts查詢狀態(tài)。

總結(jié)

隨著越來(lái)越多的網(wǎng)站開(kāi)始使用HTTPS,甚至是開(kāi)啟全站HTTPS,數(shù)據(jù)在傳輸過(guò)程中的安全性能夠得到極大的保障,與此同時(shí),通過(guò)HSTS的幫助,避免SSL Stripping或者中間人攻擊,能夠使得數(shù)據(jù)通信變得更加安全。希望本篇文章通過(guò)對(duì)HSTS的解析,能使得更多的開(kāi)發(fā)團(tuán)隊(duì)將HSTS運(yùn)用到自己的項(xiàng)目中。

給TA打賞
共{{data.count}}人
人已打賞
0 條回復(fù) A文章作者 M管理員
    暫無(wú)討論,說(shuō)說(shuō)你的看法吧
在線客服
主機(jī)邦
我們將24小時(shí)內(nèi)回復(fù)。
2025-05-18 13:55:45
您好,有任何疑問(wèn)請(qǐng)與我們聯(lián)系!
您的工單我們已經(jīng)收到,我們將會(huì)盡快跟您聯(lián)系!
取消

選擇聊天工具: