2011-09-29 47 views
5

在很多地方我見過人們都在談論跨域XMLHttpRequest,這是不可能的,由於安全原因。但是,我還沒有找到一個帖子,指出那些安全原因究竟是什麼?使用跨域XMLHttpRequest有哪些安全風險?

人們已經提到JSONP是其中一個很好的選擇。另一種替代方法是使用OriginAccess-Control-Allow-Origin標題。

但是,我只想知道由於跨域XMLHttpRequest使用情況可能會出現哪些安全問題?

回答

9

我認爲最好回答一個問題,例如爲什麼它會非常糟糕。

你去我的網站(example.org)。我加載了一個腳本,向facebook.com/messages/from/yourgirlfriend發送客戶端AJAX請求。你碰巧登錄到Facebook,並且你的瀏覽器告訴Facebook我的請求實際上是你。 Facebook高興地向我提出了關於你想要嘗試的奇怪性事的消息。我現在知道你可能不想讓我知道的事情。

這當然是一個瘋狂的誇張,幸好不可能感謝相同的來源政策。

你現在感覺安全嗎?

+0

是的,我現在感覺更安全。 +1和謝謝。 :) –

1

如果允許,設法將Javascript注入到您的頁面(通過exploit/social-engineering)的攻擊者可以發送從您的客戶端獲得的數據(通常是敏感的),而不需要他們知道(因爲XMLHttpRequests不需要用戶行爲發生,他們沉默)。這是一種瀏覽器安全措施。

JSONP僅僅是一個圍繞這個安全措施的工作,在這個安全措施中,你給目的地一個回調,並將它們通過這個回調交給你。

編輯: 安全風險的例子:您通過網絡登錄您的電子郵件帳戶(如Gmail或雅虎)。您繼續瀏覽(在另一個選項卡中,甚至在當前選項卡中)到另一個惡意站點。這個惡意網站嘗試對您的電子郵件帳戶的同一網站執行XHR。由於XHR在您的行爲中,並且由於它是客戶端/瀏覽器端請求,所以此請求將具有與您用於登錄的會話相同的會話,因此,此網站可以對您的帳戶執行任何他們想要的操作(通過發送垃圾郵件你的賬戶,下載你的聯繫人,等等)。 另一個例子:在論壇中,有人設法將XHR的Javascript注入到另一個網站。他現在可以從所有在論壇中訪問他的帖子的人(通過使用您的網絡電子郵件的同一會話)竊取聯繫人列表(也可能會刪除它們)。更何況,他可以分享論壇成員訪問他的帖子,以獲得他們在論壇上的任何數據(私人消息/朋友..等等)。然後他可以將這些數據發送到他的服務器以保存它們。

2

沒有這些「安全原因」整個互聯網,你知道它不可能存在。事實上,我會走出一條腿,說有沒有規則是比同源政策更重要的互聯網安全。

沒有這些規則沒有網頁可以認證,谷歌,網絡郵件帳戶,所以這些都不存在。這就好像你在每個域上都有XSS一樣。您可以針對gmail.com執行XHR並閱讀任何人的電子郵件。 CSRF令牌不起作用,因爲您可以讀取任何頁面並僞造請求。

沒有單一的同源策略,但規則明確規定在Google Browser Security handbook。這些都非常合乎邏輯,而且各種平臺的規則非常相似,因爲這是因特網必須工作

通過執行Access-Control-Allow-Origin: *,您將喪失您的網頁瀏覽器授予您的權利。這有主要安全影響。您將無法使用令牌來保護CSRF免於CSRF。 capthca可以緩解這個問題,同時檢查引用者也可能有幫助(如果源是HTTPS,它將會是空白的)。您應該閱讀CSRF prevention cheat sheet