新的Facebook Javascript SDK可以讓任何網站以Facebook用戶身份登錄並獲取用戶的數據...爲什麼新的Facebook Javascript SDK不違反「同源策略」?
因此,www.example.com會包含一些來自Facebook的Javascript,但我記得,該腳本被認爲是www.example.com的來源,並且無法從facebook.com獲取數據,因爲這違反了「同源策略」。這不正確嗎?如果是這樣,腳本如何獲取數據?
新的Facebook Javascript SDK可以讓任何網站以Facebook用戶身份登錄並獲取用戶的數據...爲什麼新的Facebook Javascript SDK不違反「同源策略」?
因此,www.example.com會包含一些來自Facebook的Javascript,但我記得,該腳本被認爲是www.example.com的來源,並且無法從facebook.com獲取數據,因爲這違反了「同源策略」。這不正確嗎?如果是這樣,腳本如何獲取數據?
我想,但我不確定,他們使用iframe方法。至少跨域接收器和用於canvas應用的xfbml東西使用它。基本上你的頁面上的JavaScript在facebook.com域內創建一個iframe。該iframe然後有權執行任何需要與Facebook。與父母的溝通可以通過幾種方法之一完成,例如URL散列。但我不確定他們是否使用該方法。
這不是它的iFrame。在我的答案中看到第二個引號。 iFrame仍然會受限於與父頁面上的腳本進行交互。 – David 2010-10-24 03:45:26
從這裏:https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
同源策略阻止 文檔或腳本從一個起源 加載從獲得或從另一個 原點設置文檔的 性能。該政策的日期爲 ,可以追溯到Netscape Navigator 2.0。
稍微解釋不同的位置:http://docs.sun.com/source/816-6409-10/sec.htm
同源策略的工作原理爲 如下:從 一個原點加載文件時,從 不同來源加載腳本無法獲取或設置 瀏覽器和HTML對象在窗口 或框架中的具體屬性(請參閱表14.2)。
Facebook腳本不會嘗試與您的域中的腳本進行交互或讀取DOM對象。它只是將自己的職位發佈到Facebook。它會獲取您的網站名稱,而不是通過與您的網頁或您網站的腳本進行交互,而是因爲您填寫表單以獲取「喜歡」按鈕時生成的腳本本身。我註冊了一個名爲「http://www.bogussite.com」的網站,並將代碼放到我的網站上。此代碼中的第一個想到的就是
iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bogussite.com&
所以腳本顯然是讓您的網站信息被硬編碼URL參數的鏈接的iFrame。
Facebook的網站到目前爲止並不孤單,因爲您使用託管在其服務器上的腳本。有很多其他腳本以這種方式工作..例如,包括Google Gears,Google Analytics等在內的所有Google API都需要使用託管在其服務器上的腳本。就在上週,當我試圖找出如何爲適合移動設備的網絡應用程序的商店查找工具進行地理位置定位時,我發現了一大堆地理定位服務,它們使用託管在其服務器上的腳本,而不是複製腳本到您的服務器。
hm,我正在看'
因爲它不違反相同原產地規則的規則。它不從主頁面訪問腳本,也不訪問主頁面上的DOM元素。它只是在另一臺服務器上的頁面上發佈帖子。相同的原產地政策並不妨礙這一點。 (如果它是DID,就不會有CSRF攻擊這樣的事情)。如果它試圖從頁面上的腳本讀取變量數據並將其傳遞給Facebook,或者從表單元素中讀取數據並將該數據傳遞給Facebook,則會出現違規。 – David 2010-10-24 04:07:24
如果我記得,他們使用腳本標記插入。所以當一個JS SDK調用需要調用Facebook時,它會在當前文檔中插入一個<script src="http://graph.facebook.com/whatever?params...&callback=some_function
腳本標籤。然後Facebook以JSON格式返回數據,其格式爲some_function({...})
,實際數據位於......內。這導致在example.com使用來自graph.facebook.com的數據中的函數some_function被稱爲。
我認爲同樣的出處政策是,如果HTML頁面來自www.foo.com,並且它包含www.bar.com上的腳本,那麼使用Javascript獲取數據僅限於www.foo.com,但是沒有任何其他地方。 – 2010-10-24 04:05:30