HTTPS 部署簡要指南

2022-02-03 21:01:59 字數 2614 閱讀 6867

許多web開發者都知道ssl,但常見的情況是ssl沒有完整地部署或者沒有部署在它應該部署的地方。這篇關於何時及如何部署ssl的簡要指南,將幫助你避免大多數常見錯誤。

決不要部分部署https:請將它用於所有內容,否則你將面臨許多風險,比如session id被攔截,其危害不亞於密碼被攔截。

如果你部署了https,請將任何普通的http請求都重定向至https的url,以強制所有的請求都通過https來處理。

啟用http嚴格傳輸安全協議(hsts)來進一步減少遭受攻擊的可能。

在你的cookies,比如session cookie上設定安全標記,確保它們不會經由普通的http請求而洩露。

https是將http置於ssl/tls之上,其效果是加密http流量(traffic),包括請求的url、結果頁面、cookies、**資源和其他通過http傳輸的內容。企圖干擾https連線的人既無法監聽流量,也無法更改其內容。除了加密,遠端伺服器的身份也要進行驗證:畢竟,如果你都不知道另一端是誰,加密連線也就沒什麼用處了。這些措施將使攔截流量變得極其困難。雖然攻擊者仍有可能知道使用者正在訪問哪個**,但他所能知道的也就僅限於此了。

只要你的**有任何非公開資訊,你就應當部署https,包括那些需要登陸的**——畢竟,如果資訊是公開的,根本就無需要求登陸。那些只有管理員才能登陸的**,比如典型的wordpress站點,也需要https。

部署https是必須的,因為如果沒有它,即使有人在被動監聽,也就是監聽而不操控網路流量,他也能順著http傳輸讀取到密碼或認證令牌等機密資訊。

這種攻擊並非只存在於理論上。我自己(經過許可)就幹過幾次——在公共熱點(public hotspots)上這太容易做到了。公共熱點通常沒有使用任何wifi加密,因此監聽所有流量只不過是小菜一碟。這種情況在酒吧、賓館、火車和其他公共場所非常普遍。換句話說,如果你的使用者某些時候從公共熱點訪問你的**,而你又沒有使用https,那麼任何在公共熱點附近的人都可以監聽使用者所有的流量。這並不是監聽可能發生的唯一情況,但它確實很容易做到。

別這麼幹。只在登陸頁面使用https固然可以防止使用者的密碼被竊取,但這只是問題的一部分。

首先,你的**上使用https的部分越少,進行主動攔截就越容易:你的登陸鏈結可能指向乙個https url,但如果我在使用者點選之前就改變了鏈結,https就沒法幫到你了。部分使用https也將面臨被動攔截的風險。

驗證使用者名稱和密碼只是web上使用者身份驗證的一部分:我們還需要記住某個特定使用者已經過驗證和用於驗證的賬戶。最常見的辦法是使用session cookies,這通常意味著瀏覽器會將乙個長的隨機字串,也就是session id,儲存在乙個cookie中,例如在php中可以使用phpsessid來實現。伺服器端的資料庫知道那個隨機字串對應某個特定的session,而那個session又對應著某個特定的已驗證使用者。如果我用某種方式得到了你的session id,那麼當你登陸之後,我就獲得了你所有的許可權,這和我知道你的密碼沒什麼兩樣。

考慮到這一風險,session id都非常長且隨機,並且它的生命期是有限的,這就意味著我沒法靠猜測來獲知它,因此session id是足夠安全的。但是,由於cookie的運作方式,瀏覽器每次向**發請求時都會包含cookie資訊。所以,即使已經登陸很久了,我請求的每個網頁,哪怕通常情況下是公開的網頁,也會導致我的session cookie被瀏覽器傳送出去。如果這時有人在監聽,他們依然可以篡改我的賬戶。

簡而言之:由於允許訪問使用者賬戶的session cookie在每一次請求中都會被傳送,僅僅保障登陸頁面的安全是絕對不夠的。

強制使用https

一些**購買了ssl證書並將其配置到web伺服器上,以為這就算完事兒了。但這只是表明你啟用了https選項,而使用者很可能不會注意到。為確保每個使用者都從https中受益,你應該將所有傳入的http請求重定向至https。這意味著任何乙個訪問你的**的使用者都將自動切換到https,從那以後他們的資訊傳輸就安全了。

但上述做法還是留下了乙個空子:當使用者第一次向你的**傳送請求時,他們使用的是普通http,而那時他們可能就已經在傳輸機密資訊了。上述做法還留下了乙個「中間人攻擊」漏洞(man-in-the-middle hole)。

嚴格傳輸安全協議

為進一步加強控制,請啟用http嚴格傳輸安全協議。這是一種可由伺服器傳送的特殊的頭資訊(header),它的含義是:在設定的時限內,你不能通過普通http訪問**,也不能在證書不可靠時通過https訪問**。二級網域名稱也可以選擇包含hsts。

hsts是一種簡單的伺服器頭資訊,且容易配置。但是要注意在時限結束之前無法撤銷設定,因此不要把時限設定得太長。你應該同時使用hsts和https重定向,而不是用前者取代後者。

安全的cookies

cookies,包括session cookie,有乙個可選的安全標記。它大致的含義是:「不要用普通http連線傳送這個cookie」 啟用這個安全標記,你的cookie就不會被瀏覽器的初始http請求傳送出去,直到連線切換為https且不再會被監聽為止。

不可以。一旦你遵循了上述指南,當使用者發起普通http連線時,你沒法知道他們是否經過了驗證。關鍵在於:除非使用者已經連上了ssl,否則他們不應該傳輸任何機密資訊,比如session cookie。

雖然我還能想出其他的辦法來解決這些安全問題,但它們可能會在某個環節上失效。如今ssl的成本已相當低,採用其他方案並不划算。

Python pdb 簡要指南

a 通過 pdb.run 方法 import pdb import mymodule pdb.run mymodule.test b 命令列引數方式 python m pdb myscript.py c 最常用的是將下面一行插入到欲debug的 特定位置 import pdb pdb.set tra...

pipenv 簡要指南

pipenv是requests作者的乙個專案,整合了virtualenv,pip,pipfile,用於更方便地為專案建立虛擬環境並管理虛擬環境中的第三方模組.直接使用pip即可安裝 pip install pipenv pipenv管理虛擬環境是按專案來的,要為你的某個專案新建乙個虛擬環境,只需要在...

https申請部署

此案例用iis8.0演示 前提條件 1.https協議需要443埠,安全組和防火牆開放443埠。2.需要ssl證書 開放埠就不說了,主要說下申請ssl證書。1.let s encrypt是國外乙個公共的免費ssl專案,由 linux 會託管,它的來頭不小,由mozilla 思科 akamai ide...