網站部署 HTTPS 中需要做的事情

来源:http://www.cnblogs.com/silin6/archive/2016/10/06/5933372.html
-Advertisement-
Play Games

web 發展迅猛,技術日新月異層出不窮,web 的安全性同樣是一場持久的攻防戰。而 HTTPS 的普及,為 web 通信構建了更加良好和安全的根基。 ...


這篇文章首發於我的個人網站:聽說 - https://tasaid.com/,建議在我的個人網站閱讀,擁有更好的閱讀體驗。

這篇文章與 博客園 和 Segmentfault 共用。

前端開發QQ群:377786580

這篇文章是基於我在遷移 https://tasaid.com 的時候,和在公司跟進部署 HTTPS 的一些經驗所編寫。收錄在《Said - 從 HTTP 到 HTTPS 》系列:

部署到 HTTPS 會發生什麼

HTTP 協議和 HTTPS 協議是不相容的,即 HTTPS 和 HTTP 是不可互相訪問的 (混合資源),當 HTTPS 頁面中包含 HTTP 內容的時候,瀏覽器會向用戶拋出警告,這個網頁是加密的,但是卻包含不安全的元素,即混合資源 (Mixed Content)。

混合資源

隨著 chrome 的 安全計劃,今後以下的 API 只能在 安全環境 中使用:

實測中,當前獲取用戶地理位置 API navigator.geolocation.getCurrentPosition 已經只能在安全環境 (可以理解為 HTTPS 環境)中使用,在chrome下,非安全環境使用該 API 會顯示警告:

getCurrentPosition() and watchPosition() no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gl/rStTGz for more details.

做哪些事

自適應協議資源路徑

傳統的資源路徑會一般會寫成絕對路徑和相對路徑:

<img src="/static/bar.jpg"/>
<img src="http://tasaid.com/static/bar.jpg" />

絕對路徑的資源建議使用 // 語法讓它相容 HTTP/HTTPS,//語法表示這個資源的訪問協議和當前頁面保持一致,如果當前頁面是 HTTPS 的,則會採用 HTTPS 協議訪問,如果是 HTTP 的,則使用 HTTP 協議訪問。

<img src="//tasaid.com/static/bar.jpg" /><!--https://tasaid.com 中會訪問 https://tasaid.com/static/bar.jpg-->

非同步請求

相對路徑下的非同步請求沒有問題,絕對路徑的請求會有問題:

$.ajax('http://tasaid.com/user/get')

如果請求的 url 是相容 HTTPS 的話,則可以在 HTTPS 環境下使用 https:// 訪問,否則需要伺服器做一個 HTTPS包裝跳轉,將原 url 的請求在自己的伺服器做一層轉發,表單提交同理。

$.ajax('/httpsRedirect?url=http%3A%2F%2Flinkflys.com%2Fuser%2Fget')

iframe

iframe 只能是被嵌入的 url 也同樣支持 HTTPS,目前本人並未找到合適的方案。當然如果你們服務端真心 NB 的話也可以像某大型搜索引擎一樣把需要內嵌 iframe 的站點抓到自己的伺服器上。

HTTP嚴格傳輸安全協議

HTTP 嚴格傳輸安全協議( HTTP Strict Transport Security,簡稱 HSTS )是 互聯網工程任務小組 (Internet Engineering Task Force,簡稱IETF) 發佈的互聯網安全策略,後者負責互聯網標準的開發和推動。網站可以選擇使用 HSTS 策略,讓瀏覽器強制使用 HTTPS 協議訪問。

為什麼要強制訪問呢? 因為傳統的 HTTP 跳到 HTTPS 都依賴服務端 301/302 跳轉,例如訪問 http://tasaid.com 跳轉到 https://tasaid.com,而這次強制跳轉的通信,是基於 HTTP 的,所以是可能被劫持的。

設置 HSTS 之後,瀏覽器會在本地替換協議為 HTTPS 然後訪問伺服器,而不用再依賴伺服器跳轉,可以更多的減少會話劫持攻擊。

HSTS 是一個響應頭,只能用於 HTTPS 響應,HTTP 環境下會忽略掉這個響應頭:

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
參數 釋義
max-age 指定的時間內 (單位是秒),網站必須使用 HTTPS 協議來訪問
includeSubDomains 子功能變數名稱也必須通過 HTTPS 協議來訪問
preload 讓瀏覽器由安全功能變數名稱列表 (Preload List) 決定是否本地替換為 HTTPS 請求

最後這個 preload 可能有點抽象,就是各大瀏覽器廠商 (Chrome/Firefox/IE/Safari/Edge) 共同維護的一個功能變數名稱列表 (Preload List),你可以 在這裡查詢 ,chrome 瀏覽器可以直接在本地訪問 chrome://net-internals/#hsts 查詢。

設定 preload 參數,瀏覽器會 根據當前網站滿足的條件 嘗試把網站加入這個功能變數名稱列表 (Preload List),其他用戶再訪問這個網站的時候,如果這個網站功能變數名稱存在於這個功能變數名稱列表中,則自動啟用 HTTPS 訪問。

當用戶第一次訪問一個從來沒訪問過的網站時,本地是沒有 HSTS 信息的,所以這個第一次的會話仍然是可能被劫持的。preload 就是為瞭解決這個第一次會話劫持的問題的。

值得註意的是:一旦 HSTS 生效,在 max-age 指定的時間內,你再想把網站重定向為 HTTP,之前的老用戶會被無限重定向。而且一旦網站證書錯誤,用戶無法選擇忽略。

HSTS 是個大招,不要隨便開,不然技能冷卻時間的時間內。

結語

至此,《Said - 從 HTTP 到 HTTPS 》 系列已經完結。當今互聯網上多數站點都陸續部署上或者正在部署 HTTPS,主要是因為 HTTPS 的安全性,以及當前主流的瀏覽器支持的 HTTP/2.0 需要 HTTPS 為基礎。同時,百度也正在 積極推動 HTTPS的收錄,而 google 也聲明瞭 HTTPS 會提升一點點的網站排名,但變化不會很明顯

最簡單直觀的一個情況,常見的流量劫持 —— 比如你的手機訪問某個網站,網頁中被某些不良的運營商劫持,強行插入了一些廣告:

流量劫持

web 發展迅猛,技術日新月異層出不窮。web 的安全性同樣是一場持久的攻防戰。而 HTTPS 的普及,為 web 通信構建了更加良好和安全的根基。儘快給你的網站也部上 HTTPS 吧,迎接更好的 web 時代。

這篇文章首發於我的個人網站:聽說 - https://tasaid.com/,建議在我的個人網站閱讀,擁有更好的閱讀體驗。

這篇文章與 博客園 和 Segmentfault 共用。

前端開發QQ群:377786580

參考和引用


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #include "stm32f10x.h"#include "key.h" //按鍵初始化函數void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ...
  • MMU MMU=Segmentation Unit+Paging Unit //MMU: Memory Management Unit logical address = Segmentation Unit= linear address = Paging Unit= physical addres ...
  • $()函數在大多的JavaScript類庫中都被作為一個選擇器函數來使用,在jQuery中就是。 $(“#id”)通過id來獲取元素,用來代替document.getElementById()函數。紅色函數(JavaScript) $(“tagName”)通過標簽名來獲取元素,用來代替documen ...
  • 1、JQuery對象“ 如: $(‘div’).text("div展示的信息") 可以看成”是一個包含一個dom數組 和 包含所有Jquery方法的容器 2、每當我們調用選擇器方法查找dom樹里的元素時,其實就是把找到的dom元素存入一個JQ對象里的dom數組中,然後再把這個JQ對象返回。 當我們調 ...
  • 多態之抽象類與介面的相似點及不同點,剛學習的一點收穫,或許不是很完整,借鑒看視頻及一些被人寫的文章自己寫的下的一些心得!以便之久複習使用! 一、抽象類 (1) 抽象方法只作聲明,而不包含實現,可以看成是沒有實現體的虛方法 (2) 抽象類不能被實例化 (3) 抽象類可以但不是必須有抽象屬性和抽象方法, ...
  • 多態之抽象類與虛方法的相似點及不同點 : 不同點 1、方法關鍵字不一樣 虛方法的方法關鍵字是:virtual。 抽象類的方法關鍵詞是:abstract 2、基類的方法是否有方法體/實現 虛方法的方法:聲明並實現方法。 抽象類的方法:只作聲明,無方法體/無實現。 共同點 1、子類/派生類都要重寫父類的 ...
  • Web Is JavaScript Single-Threaded? Quill 1.0 – Better Rich Text Editor for Web Apps Next Generation Server Compression With Brotli Debugging With Node... ...
  • 對於新手的我,現在搞不了大項目,只有從小實驗小項目一點一滴做起。今天就把自己寫的猜拳小游戲給大家分享一下。適合新手一起學習。。 using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...