2012-10-04 36 views
1

使用getJSON將數據從一個域發送到另一個域。確保json獲取來自特定域,php(跨域)

下面是示例: 域A(www.a.com)使用jQuery getJSON()將數據發送到域B(www.b.com) 域B包含解析數據的所有php腳本。

出於安全原因,我想確保數據發件人是域A而不是其他人。 我讀了很多帖子和搜索,我遇到$ _SERVER ['HTTP_REFERER']爲PHP。然而,我注意到很多說這不是最好的方式,一些瀏覽器dosent支持它。

然後我遇到了另一種說法,使用cookie和訪問令牌進一步混淆了我。 我希望有人能夠指引我走向正確的方向。

這裏使用的數據在發送給dmoain B中的jQuery腳本IM

$.getJSON('b.com/parse.php?data=' + data +'&callback=?', function(data) { 
//do something 
}); 
+0

[Access-Control-Allow-Origin](http://enable-cors.org/)到你的Vhost或'.htaccess'中怎麼辦? – Touki

+0

我該如何使用它? – sm21guy

+0

在我發送的鏈接中給出瞭解釋 – Touki

回答

0

我要確保數據發送方是域A,而不是別人

沒有辦法,如果請求是由託管在特定域中的頁面中運行的JavaScript觸發可靠地檢測。

使用cookie和混淆了我進一步

這是一種間接的方法訪問令牌。本質上,過程將工作是這樣的:

  1. 其中兩臺服務器的生成訪問令牌(與到期時間一起)
  2. 它發送該令牌到其他服務器
  3. 服務器託管的應用程序將該令牌發送到客戶端
  4. 客戶端向託管數據的服務器發出請求,並在URI中包含該令牌
  5. 承載數據的服務器識別令牌並授權客戶端(可能設置cookie以便令牌自動保存)

令牌仍然可以從應用程序中提取,因爲它必須提供給客戶端。但是,這必須由完全訪問客戶的人來完成,因此不能由希望訪問您的數據的第三方網站完成。

這樣的網站可以訪問託管應用程序的網站,獲取標識令牌,然後訪問託管數據的網站。有很多方法可以防範...

如果服務器正在向數據站點發出請求,那麼它可能會從給定的IP地址發出異常高數量的請求。你可以限制它。 (然後,他們可以通過循環訪問不同的源代碼來解決此問題)。

如果請求是由Web瀏覽器進行的,那麼令牌的請求將來自與請求數據不同的IP地址。您可以將令牌自動定製鎖定到給定的IP地址。但是,對於通過代理服務器訪問的用戶來說,這將會中斷(例如,相當多的移動用戶和使用AOL的人(上次我聽說有關AOL服務器如何配置)。

-1

$ _ SERVER [ 'HTTP_REFERER']是更好的,因爲它的服務器端。

+0

該服務器變量由Referer的值填充,Referer是一個HTTP **請求**頭,因此受到客戶端的控制。 (它也是一個可選的標題,所以不是所有的客戶端都發送它)。 – Quentin