2011-05-07 24 views
3

我想爲jsonp提供服務,以便其他站點可以從我的站點獲取json數據。我知道,如果我使用Cookie來驗證用戶身份,這會很危險,因爲瀏覽器會將所有請求發送到我的網站,因此惡意頁面可能會在我的用戶的行爲中提出經過驗證的請求而不會詢問他們。如果我需要驗證頭文件,可以安全地使用jsonp嗎?

對我的服務的所有請求都必須使用請求中設置的特殊標頭進行驗證,X-AG-AUTH。必須在該標題中設置標識用戶的祕密令牌。

惡意網站能否通過jsonp從我的服務中獲取數據而無需用戶提供祕密令牌?

+1

惡意用戶是否可以從真實用戶那裏獲取身份驗證密鑰並在不知情的情況下竊取它?因爲JSONp的全部重點是它可以被JS使用,並且JS將是100%公開的。一種可以使用的技術(但從用戶的角度來看非常麻煩)是將密鑰與域相關聯,而不是用戶。然後,當您收到請求時,您可以檢查推薦人。 – sdleihssirhc 2011-05-07 02:09:07

+0

該請求還必須爲每個用戶保密,以便一個用戶不能訪問他人的數據。祕密不一定是用戶的主要密碼,但是標識網站/用戶組合的一些標識符。但我的問題是:如果用戶不給該網站他的 – 2011-05-07 04:26:27

回答

0

那麼,爲jsonp調用需要一個自定義頭部會導致jsonp調用對來自其他域的請求無用,因爲您的調用者將無法設置這些頭部。

您可以使用某種類似的方法:要求將CSRF-prevention-style token作爲POST請求中的參數傳遞。這需要您分享用於生成這些令牌的邏輯以及您希望允許調用端點的每個站點的密鑰。當然,如果這些密鑰中的任何一個在遠程服務器端受到威脅,那麼在它太遲之前你可能不會知道它。

如果您願意放棄使用真正舊版瀏覽器的人的功能,您可以使用regular JSON over CORS*以及解析器破解前綴來防止包含跨站點腳本。

我假設你的數據不是你想要公開的,在這種情況下你希望也需要SSL。

+0

感謝您的答案。爲什麼調用者無法在請求中設置標題? – 2011-05-19 22:19:15

相關問題