2011-04-14 33 views
0

我需要從Site B得到一些數據Site A的服務器端跨域請求。爲了使請求Site B檢索數據,存在與需要存在的Site B的域相關的cookie。我認爲我需要在JavaScript中使用JSONP來做到這一點?如何使心不是僞造

我的想法是使用JavaScript向B發出請求,然後捕獲結果並在A的域中將其粘貼到cookie上,以便後續請求A將攜帶返回數據的cookie(它並不重要向A發送兩個請求,以獲取信息到A的服務器端)。這將工作得很好,除非它完全可以破解。

數據本身並不是祕密,但我需要防止請求僞造或Site A上的人員手動調用JSONP回調函數,或者手動設置A cookie與被盜或僞造的數據。另外,還有沒有其他的黑客攻擊漏洞?這也需要預防!

我能想到這樣做的唯一方法是:

Site A產生會話隨機令牌並將其存儲。然後它將此令牌附加到JSONP請求的查詢字符串Site B。然後Site B響應,但使用數字簽名將通常的數據與令牌一起加密。然後Site A將此值粘貼在A的cookie中。在A的下一個請求中,A的服務器端可以捕獲cookie,獲取值,解密,檢查令牌以及它是否與會話中的值匹配,相信其餘數據。

這聽起來合理嗎?有更容易的方法嗎?我的目標是在A的最後減少複雜性。

感謝

+0

你是否在控制這兩個網站?即你可以在兩個域中進行代碼更改嗎? – 2011-04-14 07:59:22

+0

聽起來像你剛剛重新創建公鑰密碼術!看到這裏:http://en.wikipedia.org/wiki/Public-key_cryptography#A_postal_analogy – bdares 2011-04-14 08:00:45

+0

@bdares不,我沒有,因爲這仍然不能防止僞造。什麼阻止我偷別人加密repsonse和自己使用它? – 2011-04-14 08:04:40

回答

1

,以避免它被破解的方式是讓網站相互直接通信,而不是使用客戶端的JavaScript。編寫一個小型輕量級REST API,允許數據在幕後,服務器到服務器之間傳輸。

當連接到站點A,包括然後可以使用幕後的來電網站B.此調用任何其他所需信息傳遞要檢查的URL的認證令牌。該令牌可能應該是IP綁定的,並在使用後到期。成功後,您可以在網站A中設置Cookie信息,以免需要進一步往返。

+0

這將是理想的,但在用戶的瀏覽器中存儲的「網站B」Cookie是什麼? – 2011-04-14 08:24:44

+0

增加了更多。出於安全原因,您無法訪問不同域名的Cookie。 – 2011-04-14 08:31:25

+0

你是什麼意思「鏈接到網站A」?另外,JSONP請求將傳輸Cookie – 2011-04-14 08:35:58

1

你可以使用easyXDM域之間進行通信。有了它,你有兩個JavaScript程序,一個用於消費者域,一個用於提供者,它可以聲明消費者的域。這兩個程序都可以與用戶進行交互,用戶可以向雙方進行身份驗證。隨着供應商計劃知道用戶是誰,知道誰是消費者,供應商可以將想要的任何數據傳遞給消費者。

這就是Twitter,Disqus和LinkedIn等大公司使用的API。

+0

有趣,我會調查!謝謝 – 2011-04-28 16:05:20