我正在評估實現wsgi-app瀏覽器會話管理的可能性和可行性,而不使用任何現成的中間件。會話管理,SSL,WSGI和Cookies
所考慮的一般方法是:
在瀏覽器和服務器之間使用SSL。 將SSL會話標識公開到WSGI或OS.environment,以用作會話標識以啓用應用程序級別的持久性和身份驗證。 因爲如果服務器+瀏覽器再次握手,SSL會話ID可能隨時發生變化,所以想法是使用cookie來保存生成的SSL ID的散列版本。 如果檢測到握手和SSL ID更改(暴露給環境的SSL會話ID與客戶端返回的cookie不匹配),則可以檢查哈希cookie以查看它是否包含先前已知的會話ID,if那麼我們應該繼續當前會話並更新cookie中使用的SSL會話標識(並存儲在後端數據庫中),以作爲新生成的握手SSL會話標識。因此,即使SSL會話ID可以在我們的腳下改變,我們仍然可以繼續會話。
根據我的理解,這個想法是讓SSL生成會話ID,並且做一些比依靠cookie + hmac來保存會話ID更安全的事情。
我會對任何人對上述過程的想法感興趣。原則上,我聽起來很合理,但我對這種功能的使用經驗很少。我已經繪製了幾個場景下客戶端&服務器& wsgi-app之間的交流流程,它看起來工作得很好,但我不舒服我已經涵蓋了所有的基礎。
我曾經看到這是一個問題,但首先我想問:在步驟2你是什麼意思'會話ID未加密' - 我知道這將作爲發送的SSL信息的一部分進行加密服務器+客戶端之間。 - 另外,Bob在這種情況下不需要讀S,如果他可以從Alice那裏竊取H(S),然後發起一個新的與服務器的SSL會話,那麼該方案會讓他繼續保持會話嗎? –
續... 我已經提出這個問題,但答案是'如果你的系統受到破壞,所以鮑勃可以竊取H(S),那麼你有其他安全問題,不在這個範圍'? (IE;'如果有人已經妥協了你的系統你的骨胳'無論如何說法) –
@MattWarren問題1:SSL會話ID被*發送清除*,看看[wireshark文檔](http:// wiki .wireshark.org/SSL)看看如何提取它,並在[這篇文章中瞭解爲什麼](http://docwiki.cisco.com/wiki/Secure_Sockets_Layer_Persistence_Configuration_Example)它是以明文形式發送的。問題2:我描述的場景被稱爲「中間人攻擊」,唯一的要求是Bob可以窺探Alice的流量。你會明白這比Bob能夠從Alice竊取會話密鑰要少一些(而且更可能是** far)。 –