1. 程式人生 > >關於jsonp實現跨域訪問,以及存在的安全問題

關於jsonp實現跨域訪問,以及存在的安全問題

jsonp跨域訪問的實現

關於jsonp實現跨域訪問相關知識,請看某位大佬這篇博文,雖然是2012年寫的老文章了,但是對於新手來說寫滴是相當不錯:深入淺出JSONP–解決ajax跨域問題

jsonp可能導致的安全問題

瞭解了jsonp之後,大家應該也都明白了,jsonp主要就是用來實現跨域的獲取資料,但是如果跨域的介面是暴露在公網上的,到底跨域介面是否是private級別還是public級別呢?這是一個重要的問題,如果是public級別,則無所謂安全問題,如果是private級別肯定是是要對訪問者做校驗驗證來訪的Request的合法性的。目前已知的有Referer校驗和Token校驗。

Referer

HTTP Referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器基此可以獲得一些資訊用於處理。

這裡通過對header中的訪問發起者的來源進行驗證來保證安全性,但是這個Referer是存在被繞過的可能的:
繞過的主要原理就是“不傳送Referer”
* 使用data URI方案
* 從HTTPS向HTTP發起請求

Token

主要是指能代表使用者身份的標識

這個部分破解的難度較高,但是通過在執行非同源跨域的網站植入惡意程式碼,間接依靠“白名單”站點來獲取Token發起跨域訪問,可以同時繞過Referer和Token的問題,但是植入惡意程式碼的難度較高。

解決方案

總的來說Referer和Token校驗是標準,必須要使用的,可以解決常規安全問題,最穩妥的是不使用jsonp,改用別的跨域方案(H5 提供的跨域方案postMessage、CORS、WebSocket)