2011-06-11 35 views
2

我正在編寫一個應用程序,它使用jQuery和JSONP從第三方服務器獲取JSON。我的應用程序背後的主要想法是它只有GUI邏輯的前端,任何人都可以編寫第三方服務器來使用前端。
我不知道會發生什麼樣的安全問題,但我絕對認爲它是一個潛在的問題。我可以採取哪些步驟來確保第三方服務器不會完全崩潰將運行GUI的網站?jQuery中的JSONP的安全問題

回答

2

JSONP表示您執行應該返回Javascript對象的第三方JavaScript。使用JSONP加載的腳本可以執行本地腳本可以執行的任何操作,因此它有兩種方式是XSS攻擊矢量:要麼是您請求的JSONP數據的第三方是惡意的,要麼數據是用man-in中間人攻擊。

第二種類型的攻擊可以通過僅通過安全連接來執行JSONP來避免(或者如果您自己的頁面通過不安全的連接發送,則可以忽略這種攻擊,在這種情況下,有更簡單的方法來執行man-in-the-the-中級攻擊);第一種類型是JSONP固有的,無法避免。當你信任源時,你應該只使用JSONP。否則,您可以在自己的服務器上設置AJAX網關,並通過它請求JSON數據(只有JSONP服務不需要驗證時才能使用JSON數據),或者使用跨域AJAX請求(這在舊版瀏覽器中不起作用,並且需要來自JSONP服務器的特定權限)。

0

那麼,JSON描述了一個對象,而不是一個可執行的函數。 JSONP正在做的是在客戶端上將GET請求的結果作爲函數呈現並執行。這意味着你會考慮的最大的安全問題就是你的代碼是如何處理數據的。

+0

好吧,我的代碼正在獲取數據(希望以特定格式提供)並將其顯示給用戶。當用戶交互時,我將數據發送回第三方服務器。我最擔心的是,有人可能會導致一些Javascript執行,使他們能夠訪問我的網站用戶的功能,或者執行一些Javascript,這可能會導致我的網站以某種方式被重載(儘管我明白這不是作爲一個擔心,看到JS是客戶端) – 2011-06-11 20:11:43

+0

Downvote and no comments? – 2011-06-11 22:38:40

1

如果第三方不值得信賴,那麼您在這裏遇到很大問題。他們可以發送他們想要的任何JavaScript代碼,而不是發送JSONP代碼,這可能會損壞您的網站或竊取用戶的信息。

JSONP的工作原理是在頁面上使用<script>標籤包含遠程數據。它旨在避免瀏覽器的安全限制,因此只能使用可靠的來源。

此問題的客戶端唯一解決方案不存在。

編輯:哦,我誤解了你的問題。我認爲客戶將會收到JSON。

JSONP只是一個封裝在javascript函數調用中的JSON對象。通常,如果您是從服務器進行操作,那麼您只需要請求解包的JSON對象本身,但即使使用JSONP對象,除非您正在運行eval(),否則很難傷害自己。

您是否使用現有的JSON庫?如果是這樣,你應該沒問題。

你自己解析它嗎?如果是這樣,請避免eval,你應該沒問題。