一旦請求發送到http://www.mydomain.com/cart/
,如果請求中有任何敏感數據,則爲時已晚。強制它打破!至少,它會給你一個指示,說明你的鏈接有問題。在以前的答案更多細節:
[...]由請求到達服務器, 爲時已晚的時間。如果有MITM,那麼在你收到請求之前,他已經完成了他的攻擊(或者是其中的一部分)。
那麼你最好能做的就是回覆沒有任何有用的內容。在 這種情況下,重定向(使用301或302和位置標頭) 可能是合適的。但是,如果用戶(或者作爲開發人員,即使您是 )忽略警告(在這種情況下, 瀏覽器將遵循重定向並以幾乎 透明地重試請求),它可能會隱藏問題。
因此,我只想建議返回404種狀態:
http://yoursite/
和https://yoursite/
是有效的兩個不同的網站。沒有理由期待從一個URI空間到另一個URI空間的所有 資源的1:1映射(就像您可以擁有完全不同的層次結構的 ftp://yoursite/
一樣)。
- 更重要的是,這是一個應該向上游處理的問題:應該認爲使用
http://
將用戶引導至此資源的鏈接已損壞。不要讓它自動工作。 對於不應該存在的資源有404狀態是沒有問題的。在 另外,當出現錯誤時返回錯誤消息是很好的: 它會迫使您(或至少提醒您)作爲開發人員,您需要修復導致此問題的頁面/表單/鏈接。
編輯:(例)
比方說,你有http://example.com/
,您的網站的非安全部分,允許用戶瀏覽的項目。他們沒有在該階段登錄,因此可以通過簡單的HTTP執行。
現在,它的購物車/付款時間。你需要HTTPS。您將用戶發送至https://example.com/cart/
。如果將用戶發送到購物車部件的鏈接之一使用普通HTTP(即http://example.com/cart/
),則這是一個發展錯誤。它不應該在那裏。當你認爲你將被髮送到https://example.com/cart/
時,讓過程中斷,允許開發人員看到它(並且一旦修復,用戶應該永遠不會有問題)。
如果它只是指向您網站的HTTPS部分(通常是通過某處鏈接進行HTTP GET),那麼這並不是一個很大的風險。
自動重定向變得更加危險的地方在於何時會隱藏更大的問題。
例如,你在https://example.com/cart/creditcarddetails
,你已經填寫了一些應該保持在SSL上的信息。但是,開發人員犯了一個錯誤,並且在表單中使用了一個簡單的http://
鏈接。另外,開發人員(畢竟用戶/人)在Firefox中說「警告:您正在從安全頁面轉到非安全頁面」時點擊了「不要再顯示此消息」順便說一下,不幸的是,Firefox警告後驗:當它向用戶顯示消息時,它已經提出了不安全的請求)。現在,具有敏感數據的GET/POST請求首先被髮送到不正確的明文http://
鏈接,並且自動重寫告訴瀏覽器通過https://
再次嘗試請求。它看起來很好,因爲就用戶而言,這一切都發生在幾分之一秒內。但是,並非如此:敏感數據已發送清楚。
將純粹的HTTP部分製作成只應通過HTTPS執行的操作,不會做任何有用的事情,實際上可以幫助您更清楚地看到錯誤。因爲如果鏈接正確實施,用戶永遠不會終止那裏,這對他們來說不是問題。
請求中沒有任何敏感數據...我一起發送的唯一內容是在URL中,它是隻是一個參數,表明他們正在購買什麼產品。 – dcolumbus 2012-02-02 21:24:12
@dcolumbus,請求中是否有敏感數據並不重要。重點是不應該有任何請求不通過HTTPS(如果你總是希望通過HTTPS),那麼任何發送一個簡單請求的東西都將是一個錯誤。強制中斷可以幫助您檢測到錯誤並防止錯誤的假設(也許有一天您會錯誤地將敏感數據放入請求中)。 – Bruno 2012-02-02 21:28:58
我想要做的就是確保當用戶被引導到'/ cart /'時,我們強制啓用SSL。如果沒有SSL,他們也無法完成整個流程。 – dcolumbus 2012-02-02 21:30:43