我從來沒有聽說過一個服務器試圖限制來自外部網頁的訪問。
同源策略是瀏覽器而不是服務器施加的限制。
CORS是服務器告訴瀏覽器它可以放鬆其正常的安全性,因爲數據不需要這個級別的保護。
即使服務器要限制從其他域的連接,這是不可能做到這一點使用HTTP協議的能力。
這就是爲什麼HTTP協議不用於此目的。
我建議使用令牌。
使用nonce防止CSRF解決了另一個問題。
這是一個相對昂貴的解決方案,只有在請求的副作用可能有問題時(例如「發表新評論」),而不是將數據傳回到另一個運行的JavaScript現場。
您不能使用它們代替相同原點策略來防止跨源讀取數據,因爲(沒有相同原點策略)攻擊性網站將能夠讀取令牌。
什麼用堵的XMLHttpRequest,而你仍然可以使用JSONP的?
除非服務器使用JSONP提供數據,否則不能使用JSONP。
提供在JSONP數據,並使用CORS授予權限訪問的資源是兩種不同的方式,服務器可以讓瀏覽器訪問通常由同源策略保護的數據。
JSONP是一個黑客攻擊。 CORS後來出現,並且更加靈活(因爲它可以允許訪問任何類型的數據,響應除GET以外的請求方法,並允許添加自定義HTTP頭)。
你能解釋這是爲什麼那麼做?
默認策略是「No Access」,因爲瀏覽器無法知道請求的數據是否是公開的。
考慮這種情況:
Alice在Bob的網站上有一個帳戶。該帳戶受密碼保護,並具有Alice和Bob之間應保密的信息(例如銀行記錄或考試結果)。
Mallory有另一個網站。它使用Ajax嘗試訪問Bob的網站。
沒有同源策略,愛麗絲可能(而在Bob的網站登錄)參觀馬洛裏的網站。如果沒有Alice的知識或許可,Mallory的網站會將JavaScript發送到Alice的瀏覽器,該瀏覽器使用Ajax從Bob網站獲取數據。由於它來自Alice的瀏覽器,因此Alice的所有私人信息都被提供給JavaScript。 JavaScript然後將其發送給Mallory。
這顯然不是一件好事。
相同來源策略可以防止這種情況發生。
如果Bob,作爲運行網站的人,決定該信息不是保密的,可以公開分享,那麼他就可以利用CORS或JSONP提供給其他網站上運行的JavaScript訪問它。
你知道一種方法來阻止網頁上的任何跨域請求。
號的網頁是一個單獨的實體。試圖從其他部分監控它的一部分是愚蠢的事情。
想象一下初級web開發人員在頁面上創建登錄表單,該頁面上有廣告或其他腳本可能會嗅探密碼?這不是網絡安全的本質嗎?爲什麼有人在談論這個?
「小心信任第三方腳本」是沒有得到應有的提及。值得慶幸的是,大多數廣告提供商和CDN託管的圖書館都是由合理可靠的人員提供的。
你知道克服缺少訪問控制允許來源
- 配置服務器,以便沒有丟失它的問題的簡單方法。
- 使用JSONP代替
- 使用未被相同原始策略阻止的代理來取回數據(您不會獲得瀏覽器可能發送的任何憑據,因爲Alice擁有Bob的帳戶)。
我相信交叉來源的ajax調用的責任完全奠定了客戶端而不是服務器。服務器如何知道請求是否跨域?爲什麼頁面可以向邪惡的服務器發出請求,卻無法請求某個人忘記放置'Access-Control-Allow-Origin'頭部的服務器? – Dan 2014-12-07 20:54:41
「即使服務器想要限制來自其他域的連接,使用HTTP協議的功能也無法做到這一點,我建議使用令牌。」如果你可以讓AJAX請求任意的跨域內容,你可以獲得這些令牌。 – 2014-12-07 21:00:14