2011-09-29 91 views
11

我知道它違反了Same origin policy,這就是爲什麼它不可能通過簡單的ajax請求。我可以使用JSONP。但使用JSONP進行登錄聽起來並不安全(沒有帖子只能得到)。從HTTP通過AJAX調用HTTPS登錄

那麼是否有更安全的方式通過ajax實現登錄到https?

+0

是的,從等式中取出HTTP。如果你在'HTTP'內執行'GET'請求,它就是明文。否則,請在服務器上重新指定,以在登錄頁面上強制將'HTTP'強制爲'HTTPS'。 – Anders

回答

13

它不僅違反了same origin policy,但由於您呼叫的頁面不安全,它可能會被幹擾並泄漏您嘗試保持安全的所有數據。

在整個過程中使用HTTPS。

更好的是,在用戶登錄時繼續使用HTTPS,否則您將擁有the Firesheep problem

+0

我知道我會冒這個風險。但由於網站上的內容都不是用戶生成的,因此可以降低被幹擾的風險。登錄服務使用HTTPS,我想從http – MarutiB

+0

調用它。另外,我無法使用https登錄所有網頁,它是一個媒體繁重的網站,而https對緩存的影響可能會真的讓我的網站變慢。 – MarutiB

+0

@Quentin你能詳細說明風險是什麼嗎?數據如何泄漏? – Dave

1

正如我們在下面的評論中所討論的,這是Facebook爲其註冊頁面所做的工作,儘管這種方法存在一些漏洞。儘管用戶看起來不安全(無鎖圖標),但實際的請求是通過HTTPS完成的。如果您控制了整個接收頁面,那麼通過GET執行JSONP請求的安全性就會降低。但是,中間人攻擊可能會在接收的頁面上修改負載,並將返回的憑據發送給攻擊者。

從好的一面來看,沒有人只是嗅探數據包就能獲得憑據:攻擊必須是相當有針對性的。在技​​術上,JSONP可以「返回」Cookie;你只需返回你想要設置的cookies的名稱 - 值對,並在接收頁面上設置一個函數來設置它們。

但是,除非瀏覽器以不同的方式處理<script>,並且它可能應該能夠使用JSONP響應的響應頭以正常方式設置cookie。

+0

我想讓人們更容易在我的網站上註冊。這又需要安全。所以當有人點擊註冊。我提出了註冊的彈出窗口,當他點擊註冊時,我希望通過ajax進行註冊。 – MarutiB

+1

@MarutiB我喜歡這些,我默認爲'我不知道Facebook會做什麼',事實證明,他們幾乎完全是你正在做的事情。所以也許你沒事吧。但是,是的,JSONP或直接包括從https站點呈現的JavaScript(與JSONP相同的想法)是您唯一的解決方案。更多關於上面的cookie。 – Dave

+0

我知道:(我想在改善用戶體驗的安全性上付出一點點代價 – MarutiB