2011-02-23 55 views
5

因爲它是直接使用JSONP在腳本標籤從不同領域獲取數據,我們不應該讓XMLHttpRequest來做到這一點呢?聲稱它可以加強安全性是沒有什麼意義的,儘管它有可能解決這個問題,儘管語義更加混亂。當腳本標籤工作時,爲什麼禁止跨域ajax?

+0

您需要了解同源策略,我建議谷歌瀏覽器的安全手冊。 – rook 2011-02-23 19:23:38

回答

8

JSONP只有在供應商允許它的工作原理。

如果跨域AJAX的工作,第一問題之一是人們張貼到其他領域,希望你有一個身份驗證的帳戶存在。這是CSRF。

,他們可以得到一個網頁認證爲你,把你的令牌,然後POST與令牌(它告訴應用程序,這是一個內部請求)什麼惡意。

+2

我真的很驚訝有多少開發人員不知道CSRF。 – corrodedmonkee 2011-02-23 12:37:03

+0

好點。但是,似乎改進XMLHttpRequest比腳本標記黑客更好。爲什麼不給它自己的cookie環境? – henle 2011-02-23 12:48:57

+0

@henle你可以通過IP或GET參數傳遞身份驗證。 – alex 2011-02-23 13:09:00

3

實際上,JSOP是一個聰明的解決方法,它可以解決同一起源策略的侷限性,但是它基本上是一個自我交叉的腳本攻擊(請記住,JSONP通過使用腳本標記而不是XHR來完成,在你的整個頁面上傳給你的JSONP數據提供者 - 通常他們不是邪惡的,但有時他們無能爲力,所以記住)。

關於如何在新版本的ECMAScript中修復相同的原產地策略有很多討論,因爲如果必須規避任何種類的混搭,它顯然不起作用。我認爲一個有趣的想法是有一個更便宜的XHR版本,它不會發送cookie或無用的標題,所以能夠防止跨站請求僞造攻擊,但仍然允許安全混搭,而不會讓數據提供者完全訪問您的頁面。但我們仍然需要等待。

+0

對,禁止(或沙箱)餅乾和任何頭可以濫用請求到外國領域。這聽起來不太難以解決。雖然XHR不是由ECMAScript定義的,但它由W3C定義。 – henle 2011-02-23 16:54:06