2012-08-31 67 views
1

訪問API資源可以通過它可以自動通過網絡瀏覽器來發送,但不會發出跨域除非允許跨域訪問所有API資源是否安全?

  1. 證書進行認證訪問控制允許的憑據設置爲「真」(如Cookie,HTTP基本/摘要式身份驗證,SSL證書)。

  2. 必須由客戶端手動設置(例如OAuth訪問令牌)祕密標記,無論是在HTTP標頭中還是作爲URL中的查詢參數。

考慮到這一點,在API中的所有資源上設置「Access-Control-Allow-Origin:*」總是安全的嗎?

+0

本質上,問題是「如果一個API僅使用HTTP頭中的OAuth進行身份驗證,是否可以安全地在所有資源上設置」Access-Control-Allow-Origin:*「? –

+0

然後,一個必然的問題就是「只要沒有發送憑據,爲什麼網絡瀏覽器不允許跨域訪問所有資源?」 –

回答

0

如果攻擊者在任何時候對他所控制的域執行JavaScript都可以獲取數據或執行狀態更改而不提供令牌,那麼您就有漏洞。這次攻擊與CSRF非常相似,只是它擴大了數據的過濾範圍。

但就像CSRF一樣,如果客戶端必須使用每個請求的令牌進行身份驗證,並且攻擊者不知道此令牌,那麼他將無法訪問CORS API,並且會出現CSRF類攻擊。

+0

假設沒有憑據的唯一行爲是讀取公共數據(應該是這樣),那意味着沒有漏洞?如果只啓用「Access-Control-Allow-Origin:*」,那麼將無法跨域發送證書? –

+0

@Alf Eaton你可以在沒有CORS的情況下發送數據,這就是CSRF攻擊背後的全部想法。 CORS允許你讀取數據,如果攻擊者不知道密鑰(而密鑰不是cookie),那麼他仍然不能讀取數據。 – rook

+0

您可以發送沒有CORS的數據,但不是沒有憑證;只要保證證書不會自動發送,這意味着爲所有資源啓用CORS頭文件是安全的。 –

相關問題