簡體   English   中英

何時啟用CORS是安全的?

[英]When is it safe to enable CORS?

我正在開發一個JSON / REST Web API,我特別希望第三方網站能夠通過AJAX調用我的服務。 因此,我的服務是發送着名的CORS標題:

Access-Control-Allow-Origin: *

這允許第三方站點通過AJAX調用我的服務。 到目前為止都很好。

但是,我的web api的一個子部分是非公開的,需要身份驗證(OAuth和access_token cookie非常標准)。 在我的網站的這一部分啟用CORS是否安全?

一方面,如果第三方網站可以擁有也與我的這部分服務進行交互的ajax客戶端,那將會很酷。 但是,首先存在相同原產地政策的原因是這可能存在風險。 您不希望之后訪問的任何網站能夠訪問您的私人內容。

我擔心的情況是用戶登錄我的網絡API,無論是在網站上還是通過他信任的網站,他忘記退出。 這會允許他之后使用現有會話訪問其私人內容嗎?

所以我的問題:

  • 在非公開內容上啟用CORS是否安全?
  • 如果啟用CORS的服務器通過cookie設置session_token,該cookie是否會保存在CORS服務器或主網頁服務器的域下?

在回答第二個問題時(如果啟用CORS的服務器通過cookie設置session_token ......?),cookie將保存在CORS服務器的域下。 主網頁的JS代碼無法訪問cookie,即使是通過document.cookie 僅在設置.withCredentials屬性時才將cookie發送到服務器,即使這樣,只有在服務器設置Access-Control-Allow-Credentials標頭時才接受cookie。

你的第一個問題是更開放的問題。 這是相當安全的,但有辦法繞過事情。 例如,攻擊者可以使用DNS中毒技術導致預檢請求到達實際服務器,但是將實際的CORS請求發送到流氓服務器。 以下是有關CORS安全性的更多資源:

最后,您關注的是讓任何網站都能訪問您的CORS數據。 為了防止這種情況,您不應使用Access-Control-Allow-Origin: *標頭。 相反,您應該回顯用戶的Origin值。 例如:

Access-Control-Allow-Origin: http://www.example.com

此標頭僅允許http://www.example.com訪問響應數據。

CORS的目的是允許對XHR請求的跨源請求,同時賦予服務器指定哪個源可以訪問哪個資源的權限。 特別是,CORS引入了Origin頭字段,允許服務器區分常規和可能的XHR請求。 用戶不能設置或更改此標頭字段,但是瀏覽器會為XHR請求設置此標頭字段。

因此,如果您有一個僅供XHR使用的API,您可以(並且應該)要求請求符合CORS。 特別是如果請求也可以修改服務器上的狀態,否則您將容易受到CSRF的攻擊。

請注意,無論CORS使用其他方法偽造GET和POST請求,都可以進行CSRF攻擊。 如果服務器允許,CORS僅允許使用JavaScript訪問服務器對XHR請求的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM