與許多開發人員一樣,我想通過服務器「A」與服務器「B」上的Web服務對話來提供JavaScript,但受當前版本same origin policy的阻礙。解決這個問題的最安全的方式(我可以找到)是一個服務器腳本,它位於服務器「A」上,充當它與「B」之間的代理。但是,如果我想在各種客戶環境(RoR,PHP,Python,.NET等)中部署此JavaScript,並且無法爲它們編寫代理腳本,我該怎麼做?使用JSONP,some people say。那麼,Doug Crockford指出on his website和in interviews腳本標記hack(由JSONP使用)是一種不安全的方式來繞過相同的原始策略。 「A」服務的腳本無法驗證「B」是否是他們自稱的用戶,並且它返回的數據不是惡意的,或者將捕獲該頁面上的敏感用戶數據(例如信用卡號碼)和傳送給卑鄙的人。這似乎是一個合理的擔憂,但如果我只是使用腳本標記hack本身並嚴格使用JSON進行通信呢?那安全嗎?如果不是,爲什麼不呢?使用HTTPS會更安全嗎?示例場景將不勝感激。腳本標記黑客安全執行XSS?
附錄:需要支持IE6。第三方瀏覽器擴展不是一個選項。讓我們繼續討論腳本標記黑客的優點和風險。
你是什麼意思?如果我只是使用腳本標記本身進行破解,並嚴格使用JSON進行通信? – 2010-08-27 17:03:12
由「A」提供的腳本將包括一個將腳本標記附加到客戶端DOM的語句。該腳本標記將包含一個AJAX調用,該調用將從不同域中的「B」獲取純JSON數據。如果由「A」提供的腳本將響應解析爲JSON,那麼是否有任何JavaScript填充(又名JSONP,惡意或其他)會導致解析錯誤? – Adam 2010-08-27 19:38:27