2012-08-17 270 views

回答

37

通過回覆Access-Control-Allow-Origin: *,請求的資源允許與每個來源共享。這基本上意味着任何站點都可以向您的站點發送XHR請求並訪問服務器的響應,如果您未實施此CORS響應,情況就不會如此。

因此,任何網站都可以代表訪問者向您的網站提出請求並處理其響應。如果您的某些實現方式(如身份驗證或授權方案)基於瀏覽器自動提供的內容(Cookie,基於cookie的會話等),第三方網站觸發的請求也會使用它們。

這確實會帶來安全風險,特別是如果您允許資源共享不僅僅針對選定的資源,而且針對每個資源。在這種情況下,你應該看看When is it safe to enable CORS?

+1

如果你可以給出一個具體例子,說明共享授權訪問如何構成安全風險,我會對此表示讚賞。 – 2013-04-10 12:56:55

+0

@Gumbo靜態內容怎麼樣? (例如靜態cdn內容,例如javascripts,css,static htmls等)是否存在設置「訪問控制 - 允許 - 來源:*」的安全問題?沒有nogin等,他們是公開給大家的? – 2013-06-27 07:14:25

+2

@UmutBenzer沒關係。 – Gumbo 2013-06-27 16:46:34

7

AFAIK,Access-Control-Allow-Origin只是一個從服務器發送到瀏覽器的http頭。例如,將其限制到特定地址(或禁用它)並不會使您的網站更安全,例如,機器人。如果機器人想要,他們可以忽略標題。常規瀏覽器(Explorer,Chrome等)默認爲標頭。但像Postman這樣的應用程序完全忽略它。

服務器端在返回響應時並未實際檢查請求的「原點」。它只是添加了http頭。它是發送請求的瀏覽器(客戶端)決定讀取訪問控制頭並對其執行操作。請注意,在XHR的情況下,它可能會使用特殊的「選項」請求首先要求標題。

所以,任何具有創造性腳本功能的人都可以輕易地忽略整個標題,無論設置在哪個標題中。請參閱Possible security issues of setting Access-Control-Allow-Origin


我們其實回答這個問題

我不禁覺得,我把我的環境安全 風險。

如果有人想攻擊你,他們可以輕鬆地繞過訪問控制允許來源。但通過啓用'*',您確實可以爲攻擊者提供更多的「攻擊媒介」,例如使用遵守HTTP標頭的常規網頁瀏覽器。

+3

看看這個從一個粗心的最終用戶的角度來看。有人可以設置一個惡意網頁,它會注入JavaScript以在真實網站和惡意網站之間傳遞數據(假設他們想竊取您的密碼)。最終用戶的網絡瀏覽器通常會阻止這種跨站點通信,但是如果設置了Access-Control-Allow-Origin,那麼它將被允許,並且最終用戶不會更聰明。 – Brain2000 2014-04-11 15:57:41

+2

是的,在一個承載腳本竊取密碼的惡意網站上設置'Access-Control-Allow-Origin *'是強烈建議:-) – commonpike 2014-04-12 18:24:34

+2

哦,我得到了一個笑話。不,我不能從用戶的角度來看待它。它是決定設置HTTP標頭的網站管理員或網站製作者。 「有人可以設置惡意網頁」 - 是的,也有人會添加惡意指令。再次,任何客戶端 - 如受感染的瀏覽器 - 可能會選擇忽略http標頭,無論它們是否在其中。 – commonpike 2014-04-25 12:30:57

5

這裏有兩個例子張貼評論,當一個通配符是真的有問題:

假設我登錄到我的銀行網站。如果我轉到其他頁面,然後返回到我的銀行,我仍然因Cookie登錄。其他 互聯網上的用戶可以像我一樣在我的銀行中訪問相同的URL,但是 他們將無法訪問我的帳戶,而無需Cookie。如果 允許跨域請求,惡意網站可以有效地冒充用戶。

- Brad

假設你有一個常見的家用路由器,如一個Linksys WRT54G或 東西。假設路由器允許跨域請求。我的網頁上的腳本 可能會向通用路由器IP地址 (如192.168.1.1)發出HTTP請求,並重新配置您的路由器以允許攻擊。它甚至可以直接使用你的路由器作爲DDoS節點。 (大多數路由器 測試頁,其允許ping或簡單的HTTP服務器會檢查這些 可能會被濫用集體。)

- Brad

我覺得這些意見應該是答案,因爲他們用一個reallife例子來解釋這個問題。

+2

除此之外無效。 「字符串'*'不能用於支持憑證的資源。」 https://www.w3.org/TR/cors/#resource-requests – bayotop 2017-03-31 12:36:51

+0

@bayotop瀏覽器如何區分需要認證的頁面和頁眉中包含其他數據的頁面? – wedstrom 2017-08-08 16:12:27

+0

閱讀提供的鏈接後,會出現用於此目的的「支持憑證標誌」。它似乎是手動設置的,所以假設有人不知道如何正確設置CORS,他們也可能會弄錯這個標記,所以我相信上述漏洞是可能的。 – wedstrom 2017-08-08 16:18:53

相關問題