1. 程式人生 > >json與jsonp的區別、同源策略

json與jsonp的區別、同源策略

概念:同源策略是客戶端指令碼(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文件或指令碼從多個不同源裝載。這裡的同源指的是:同協議,同域名和同埠。它的精髓很簡單:它認為自任何站點裝載的信賴內容是不安全的。當被瀏覽器半信半疑的指令碼執行在沙箱時,它們應該只被允許訪問來自同一站點的資源,而不是那些來自其它站點可能懷有惡意的資源。為什麼要有同源限制?我們舉例說明:比如一個黑客程式,他利用IFrame把真正的銀行登入頁面嵌到他的頁面上,當你使用真實的使用者名稱,密碼登入時,他的頁面就可以通過Javascript讀取到你的表單中input
中的內容,這樣使用者名稱,密碼就輕鬆到手了。Ajax應用:Ajax應用中這種安全限制被突破。在普通的Javascript應用中,我們可以修改Framehref,或者IFramesrc,以實現GET方式的跨域提交,但是卻不能訪問跨域的Frame/IFrame中的內容。Ajax它通過XMLHTTP進行非同步互動,這個物件同樣能夠與遠端的伺服器進行資訊互動,而且更加危險的是,XMLHTTP是一個純粹的Javascript物件,這樣的互動過程,是在後臺進行的,不被使用者察覺。因此,XMLHTTP實際上已經突破了原有的Javascript的安全限制。如果我們又想利用XMLHTTP的無重新整理非同步互動能力,又不願意公然突破
Javascript的安全策略,可以選擇的方案就是給XMLHTTP加上嚴格的同源限制。這樣的安全策略,很類似於Applet的安全策略。IFrame的限制還僅僅是不能訪問跨域HTMLDOM中的資料,而XMLHTTP則根本上限制了跨域請求的提交。瀏覽器支援:IE其實給這個安全策略開了兩個想當然的後門,一個是:他假設你的本地檔案,自然清楚將會訪問什麼內容,所以任何你的本地檔案訪問外部資料,都不會收到任何的警告。另一個是:當你訪問的網站指令碼打算訪問跨域的資訊時,他居然僅僅是彈出一個對話方塊來提醒你一下。如果一個欺詐網站,採用這樣的手段,提供一個假頁面給你,然後通過XMLHTTP幫你遠端登入真實的銀行伺服器。只要
10個使用者裡,有一個使用者糊塗一下,點了一個確定。他們的盜取帳號行為,就成功了!你想想看,這是何等危險的事情!FireFox就不是這樣的做法,預設的情況下,FireFox根本就不支援跨域的XMLHTTP請求,根本就不給黑客這樣的機會。避免同源策略:JSON和動態指令碼標記<script type="text/javascript"  src="http://travel.com/findItinerary?username=sachiko&  reservationNum=1234&output=json&callback=showItinerary" />   JavaScript 程式碼動態地插入 <script> 標記時,瀏覽器會訪問 src 屬性中的 URL。這樣會導致將查詢字串中的資訊傳送給伺服器。在清單 1中,所傳遞的是 username  reservation 作為名稱值對傳遞。此外,查詢字串還包含向伺服器請求的輸出格式和回撥函式的名稱(即 showItinerary)。<script> 標記載入後,會執行回撥函式,並通過回撥函式的引數把從服務返回的資訊傳遞給該回調函式。Ajax代理  Ajax 代理是一種應用級代理伺服器,用於調解 Web 瀏覽器和伺服器之間的 HTTP 請求和響應。Ajax 代理允許 Web 瀏覽器繞過同源策略,這樣便可以使用 XMLHttpRequest 訪問第三方伺服器。要實現這種繞過,有如下兩種方法可供選擇:客戶端 Web 應用程式知道第三方 URL 並將該 URL 作為 HTTP 請求中的一個請求引數傳遞給 Ajax 代理。然後,代理將請求轉發給 [url]www.remoteservice.com[/url]。注意,可以把代理伺服器的使用隱藏在 Web應用程式開發人員所使用的 Ajax 庫的實現中。對於 Web 應用程式開發人員而言,它看上去可能完全不具有同源策略。客戶端 Web 應用程式不知道第三方 URL,並且嘗試通過 HTTP 訪問 Ajax 代理伺服器上的資源。通過一個預定義的編碼規則,Ajax 代理將所請求的 URL 轉換為第三方伺服器的 URL 並代表客戶檢索內容。這樣一來,Web 應用程式開發人員看上去就像是在和代理伺服器直接進行通訊。Greasemonkey  Greasemonkey 是一個 Firefox 擴充套件,它允許使用者動態地對 Web 頁面的樣式和內容進行修改。Greasemonkey 使用者可以把使用者指令碼(user script)檔案與一個 URL 集合建立關聯。當瀏覽器通過該 URL 集合載入頁面時,便會執行這些指令碼。Greasemonkey 為使用者指令碼的 API 提供了額外的許可(與執行在瀏覽器沙盒中的指令碼的許可相比較)。  GM_XMLHttpRequest 是其中的一個 API,它從本質上說就是一個不具有同源策略的 XMLHttpRequest。使用者指令碼可以將瀏覽的內建 XMLHttpRequest 替代為 GM_XMLHttpRequest,從而許可 XMLHttpRequest 執行跨域訪問。  GM_XMLHttpRequest 的使用只能通過使用者同意的途徑才能受到保護。也就是說,Greasemonkey 只有在建立新使用者指令碼與特定 URL 的集合之間的關聯時才會要求使用者配置。然而,不難想象一些使用者可能會被欺騙,在沒有完全理解其後果時就接受該安裝。

相關推薦

jsonjsonp區別同源策略

概念:同源策略是客戶端指令碼(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文件或指令碼從多個不同源裝載。這裡的同源指的是:同協議,同域名和同埠。它的精髓很簡單:它認為自任何站點裝載的信賴內容是不安全的。當被瀏覽器半信半疑的指令碼執行在

jsonjsonp區別淺析(json才是目的,jsonp只是手段)

一言以蔽之,json返回的是一串資料;而jsonp返回的是指令碼程式碼(包含一個函式呼叫); JSON其實就是JavaScript中的一個物件,跟var obj={}在質上完全一樣,只是在量上可以無限擴充套件。簡單地講,json其實就是JavaScript中的物件(Obj

jsonjsonp區別淺析

一言以蔽之,json返回的是一串資料;而jsonp返回的是指令碼程式碼(包含一個函式呼叫); JSON其實就是JavaScript中的一個物件,跟var obj={}在質上完全一樣,只是在量上可以無限擴充套件。簡單地講,json其實就是JavaScript中的物件(Obje

Django 【第十九篇】JS實現的ajax同源策略和前端jsonp解決跨域問題

學習 tab頁 hello shortcuts 就會 coo 功能介紹 onclick decorator 一、回顧jQuery實現的ajax 首先說一下ajax的優缺點 優點: AJAX使用Javascript技術向服務器發送異步請求; AJAX無須刷新整個頁面;

如何用json jsonp區別去回答你的面試官?

交互 運用 訪問 數據 瀏覽器 應用 var 成了 都是 常常 有面試官這樣問我們,雖然用過無數次,但是回答不上豈不是尷尬,那我們淺析一下它們的區別? 1. json JSON是一種基於文本的數據交換格式,用於描述復雜的數據,舉個例子: var nax=[ { "

json jsonp區別,以及使用場景

  首先說說ajax,第一個是AJAX以何種格式來交換資料?第二個是跨域的需求如何解決?這兩個問題目前都有不同的解決方案,比如資料可以用自定義字串或者用XML來描述,跨域可以通過伺服器端代理來解決。  JSON(JavaScript Object Notation)和JSON

alibaba下的fast json字串String陣列和list的相互轉換

/**  * 實體類轉json  * JSONObject j1 = (JSONObject)JSONObject.toJSON(man1);  * json轉實體類  * Man man3 = JSONObject.parseObject(j

C#之基礎篇①(VS快捷鍵WriteLine()Write()區別ReadKey()ReadLine()區別double,float,decimal區別

     今天我們來分享一下VS視訊中第一講內容,這篇內容主要分享的是VS工具的使用以及簡單的資訊顯示、變數宣告。 一、導圖類: 二、程式碼類 2.1、顯示資訊 Console.WriteLine("************

說說JSONJSONP區別

前言   由於Sencha Touch 2這種開發模式的特性,基本決定了它原生的資料互動行為幾乎只能通過AJAX來實現。   當然了,通過呼叫強大的PhoneGap外掛然後打包,你可以實現100%的Socket通訊和本地資料庫功能,又或者通過HTML5的WebSocket也可以實現與伺服器的通訊和服務端推功

jsonjsonp區別

JSON例項:// 描述一個人 var person = { "Name": "Bob", "Age": 32, "Company": "IBM", "Engineer": true } // 獲取這個人的資訊 var personAge = person.Age;

node.jsajax互動之 json jsonp 資料格式問題

將 dataType 從 json 改成 jsonp 之後,新的問題出現了,就是 ajax 無法解析 json 型別的資料。這就很尷尬了,看了好幾篇怎麼解析的問題,都沒看懂。後來終於看懂了。簡而言之就是 dataType 改成 jsonp 的資料格式以後,再傳 json 格式

xgboostGBDT區別優勢

傳統GBDT以CART作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。 傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階

JSONjsonp

JSON 語法規則 JSON 語法是 JavaScript 物件表示法語法的子集。 資料在名稱/值對中資料由逗號分隔花括號儲存物件方括號儲存陣列 JSON 名稱/值對 JSON 資料的書寫格式是:名稱/值對。 名稱/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是

fwritefprintf區別printffprintf區別

C語言把檔案看作一個字元(位元組)的序列,即由一個一個字元(位元組)的資料順序組成。根據資料的組織形式,可分為ASCII檔案和二進位制檔案。ASCII檔案又稱為文字(text)檔案,它的每個位元組放一個ASCII程式碼,代表一個字元。二進位制檔案是把記憶體中的資料按其在內在

MySQL中MyISAMInnoDB區別選擇及轉換

區別: InnoDB: 支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 支援全文搜尋(5.5以後版本) 不支援FULLTEXT型別的索引 不儲存表的具體行數,掃描表來計算有多少行 DELETE 表時,是一行一行的刪除 InnoDB 把資料和索引存放在表空間裡面 跨平臺可直

jsonp突破瀏覽器同源策略

value inf return 生成 兩個 htm eat views app jsonp突破瀏覽器同源策略 <!DOCTYPE html> <html lang="en"> <head> <meta c

同源策略跨域jsonjsonp

open 是把 tro 兩個 屬性 ont type cti 結果 同源策略 源(origin)就是協議、域名和端口號。若地址裏面的協議、域名和端口號均相同則屬於同源。 以下是相對於 http://www.a.com/test/index.html 的同源檢測  ? htt

Ajax跨域Json跨域Socket跨域和Canvas跨域等同源策略限制的解決方法

b2c editor spec acache 查詢 方案 fin agent pla 同源是指同樣的協議、域名、port,三者都同樣才屬於同域。不符合上述定義的請求,則稱為跨域。 相信每一個開發者都曾遇到過跨域請求的情況,盡管情況不一樣,但問題的本質都能夠歸為瀏覽器出

Ajax跨域請求 同源策略Jsonp

就是 pen 針對 api 自己的 發送請求 cdn esp 自己 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是

同源策略JSONP劫持原理

# 同源策略 瀏覽器中有兩個安全機制,一個瀏覽器沙盒(Sandbox),另一個就是同源策略(Same Origin Policy,簡稱SOP) ,下面介紹同源策略。同源是指`同協議`、`同域名`、`同埠`,必須三同,缺一不可。下面列舉了一些例子,為方便讀者瞭解哪些是屬於同源,下面列舉一些案例: ![](htt