亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        JSON和XML數(shù)據(jù)傳輸及其效率、安全性研究

        2014-07-15 07:47:08冉淵
        卷宗 2014年5期
        關(guān)鍵詞:序列化瀏覽器解析

        冉淵

        摘 要:在Web開發(fā)中,如何選擇一種適當?shù)臄?shù)據(jù)傳輸格式是一個非常重要的問題。目前,主流的數(shù)據(jù)傳輸格式主要是XML和 JSON二種。在滿足基本需求的情況下,如何選擇更高效、安全的一種傳輸格式就顯得尤其重要。

        本文將對這二種傳輸格式的結(jié)構(gòu)進行闡述,并對比其數(shù)據(jù)傳輸效率及安全性,讓讀者在開發(fā)過程中選擇數(shù)據(jù)傳輸格式有一個參考的方向。

        關(guān)鍵字:JSON;XML;數(shù)據(jù)傳輸;效率;安全性

        JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。

        XML是Extensible Markup Language 的縮寫,中文名稱是可擴展標記語言,它源自標準通用標記語言SGML。XML 是一種格式統(tǒng)一,跨平臺的語言,早已成為業(yè)界的標準。XML 使用元素和屬性來描述數(shù)據(jù)。在數(shù)據(jù)傳送過程中,XML 始終保留了諸如父/ 子關(guān)系這樣的數(shù)據(jù)結(jié)構(gòu)。幾個應(yīng)用程序可以共享和解析同一個XML 文件,不必使用傳統(tǒng)的字符串解析或拆解過程。相反,普通文件不對每個數(shù)據(jù)段做描述(除了在頭文件中),也不保留數(shù)據(jù)關(guān)系結(jié)構(gòu)。使用XML 做數(shù)據(jù)交換可以使應(yīng)用程序更具有彈性,因為可以用位置(與普通文件一樣) 或用元素名(從數(shù)據(jù)庫)來存取XML 數(shù)據(jù)。

        1 JSON和XML的結(jié)構(gòu)

        1.1 XML結(jié)構(gòu)

        XML 文檔形成了一種樹結(jié)構(gòu),它從“根部”開始,然后擴展到“枝葉”。XML 使用簡單的具有自我描述性的語法。XML 文檔必須包含根元素,該元素是所有其他元素的父元素。XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。父、子以及同胞等術(shù)語用于描述元素之間的關(guān)系。父元素擁有子元素。相同層級上的子元素成為同胞(兄弟或姐妹)。所有元素均可擁有文本內(nèi)容和屬性(類似 HTML 中)。所有元素均可擁有子元素。一個典型的XML結(jié)構(gòu)如下:

        1

        a1

        http://a1.baidu.com

        hello

        2

        a2

        http:// a2.baidu.com

        world

        1.2 JSON結(jié)構(gòu)

        JSON 中的每個結(jié)構(gòu)單元均由花括號( { } ) 表示, 每個結(jié)構(gòu)中可以含有多個由逗號( , ) 分隔的成員, 而每個成員均是一個名稱/ 值對。每個名稱/ 值對包含由冒號( : ) 分隔的兩部分, 前者是名稱, 后者是值。值不僅可以是普通的數(shù)字、字符串, 也可以是邏輯值(Ture或False),一個有序列表, 用方括號( [ ] ) 表示, 其中可以包含以逗號分隔的多個值[ ] 。如上例中的XML結(jié)構(gòu)可以用JSON結(jié)構(gòu)表示為:

        {comment s:[

        {

        id:1,

        author:"a1",

        url:"http://a1.baidu.com" ,

        content: "hello"

        },

        {

        id B2,

        author : "a2" ,

        url:"http://a2.baidu.com" ,

        content:"world"

        },

        ] }

        2 傳輸效率對比

        2.1 傳輸開銷對比

        數(shù)據(jù)傳輸過程中的開銷主要來源于屬性名稱、標簽及符號。以一個簡單的數(shù)據(jù)表為例,每一列即為一個屬性,如圖1 所示。

        圖1 數(shù)據(jù)表

        XML 分為無空屬性XML 和含空屬性XML 兩類。若用XML 描述第一條數(shù)據(jù)記錄的Tel 屬性,可表示為123。對于無空屬性XML,即當屬性值為空時,不創(chuàng)建元素,數(shù)據(jù)傳輸開銷表示為(2*N+5)*(1-E),5表示開關(guān)標簽符號‘( <,‘>,‘/)共5 個。對于含空屬性XML,即屬性值為空,但標簽及屬性名稱仍然保留,若第一條數(shù)據(jù)記錄的Tel 屬性值為空,則用XML 可表示為 ,此時相當于E = 0,XML 數(shù)據(jù)傳輸開銷為2*N+5。

        對于JSON,也分為無空屬性JSON 和含空屬性JSON 兩類。若用JSON 表示第一條數(shù)據(jù)記錄,可表示為{“No”:“1”,“Sex”:“female”,“Tel”:“123”,“Age”:“10”}。對于每個屬性由于屬性名稱無需成對出現(xiàn),只需一個表示,另外包含符號‘( ",‘",‘:,‘,)共6 個,因此,無空屬性JSON(當屬性值為空時,不創(chuàng)建元素),數(shù)據(jù)傳輸開銷可表示為(N+6)*(1-E)。對于含空屬性JSON(屬性值為空,但標簽仍然保留),若第一條數(shù)據(jù)記錄的Tel 屬性值為空,則可表示為{“No”:“1”,“Sex”:“female”,“Tel”“: ”“, Age”“: 10”},即E = 0時,JSON數(shù)據(jù)傳輸開銷為N+6。

        2.2 解析速度對比

        使用Javascript 解析XML 和JSON 的速度也是比較的項目之一。假定用XML 和JSON 分別描述1000 條employee 記錄,使用Javascript 遍歷這1000 記錄并且讀取name,title,phone 和Email4個屬性。測試結(jié)果如下:

        ①IE8 JSON:77ms;XML: 770ms

        ②Fire Fox 3 JSON:68ms;XML:198ms

        ③Safari 4 JSON:69ms;XML:827ms

        ④Chrome 10 JSON:72ms;XML: 810ms

        雖然上述測試結(jié)果與測試機的軟硬件配置有關(guān),但是解析的速度分屬于兩個數(shù)量級,很明顯,Javascript 解析JSON 的速度遠遠快于解析XML。

        2.3 反序列化效率對比

        從服務(wù)器端傳輸過來JSON 或XML 的數(shù)據(jù)將被反序列化才能獲取其中的數(shù)據(jù),進而顯示在客戶端頁面上。其中,XML 是基于DOM 樹結(jié)構(gòu)的,反序列化XML 需要考慮父節(jié)點和子節(jié)點,這為反序列化增加了難度。如下是一個典型的XML 格式表示:

        lucy

        2009021125

        female

        反序列化XML 通常采用如下方式:

        var student=request.responseXML;

        var name=book.getElementsByTagName("name");

        alert(name[0].firstChild.textContent);

        而JSON 只需要通過JavaScript 語言的eval( )函數(shù)就可以將JSON 數(shù)據(jù)反序列化為JavaScript 對象。如下是上述XML示例對應(yīng)的JSON 格式:

        {

        "name":lucy,

        "stuno":2009021125,

        "sex":female

        }

        反序列化JSON 通常采用如下方法:

        var student=eval(request.responseText);

        alert(student.name);

        顯然,JSON反序列化的效率高于XML反序列化的效率,這是因為采用JSON格式的數(shù)據(jù)大大降低了反序列化時的冗余度,使反序列化效率提高。

        經(jīng)過以上分析可以看出,JSON格式的數(shù)據(jù)傳輸效率要比XML格式高。使用JSON 不僅減少了XML 解析帶來的便利性能問題和兼容性問題, 而且對于JavaScript 來說非常容易使用, 可以通過遍歷數(shù)組以及訪問對象屬性來獲取數(shù)據(jù), 基本具備了結(jié)構(gòu)化數(shù)據(jù)的性質(zhì)。Google maps 就沒有采用XML 傳遞數(shù)據(jù), 而是采用了JSON 方案。JSON 的優(yōu)勢還表現(xiàn)在它的非冗長性上。在XML 中, 打開和關(guān)閉標記是必需的, 這樣才能滿足標記的依從性; 而在JSON 中, 所有這些要求只需通過一個簡單的括號即可滿足。在包含有數(shù)以百計字段的數(shù)據(jù)交換中, 傳統(tǒng)的XML 標記將會延長數(shù)據(jù)交換時間。

        3 安全性對比

        3.1 JSON安全性

        JSON在安全性方面相對薄弱,JSON只能用于可公開的數(shù)據(jù),其他數(shù)據(jù)都不能使用JSON,除非你使用的URL無法預(yù)測,JSON才是安全的。

        這里有兩個問題:一個是CSRF(Cross Site Request Forgery,跨站點偽造請求攻擊),它允許攻擊者繞過基于cookie的身份認證。另外,維基百科也說到了這個,你可以用CSRF在一個遠程服務(wù)器上調(diào)用由cookie保護著的數(shù)據(jù)。黑客可以利用這項技術(shù)把別人銀行賬號里的錢轉(zhuǎn)到他的賬戶中。

        還有一種則鮮為人知,那就是JSON/數(shù)組攻擊,這可以讓某個用戶在Mozilla上偷取JSON數(shù)據(jù),其實只要是任何使用當代的JavaScript解釋器的平臺都會都可以實施該攻擊。

        由于 JSON 是 JavaScript 的子集,所以一般都會使用 eval() 作為讀取數(shù)據(jù)的方式,如果是針對可靠的數(shù)據(jù)來源,在不支持原生 JSON 解析的瀏覽器上面這是最快速的方法。然而由于 eval 方法同樣可以執(zhí)行任意的 JavaScript 代碼,因此當數(shù)據(jù)來源不可靠時則可能產(chǎn)生安全性問題。

        其中一種防止不安全代碼出現(xiàn)的解決辦法,是通過瀏覽器原生支持的 JSON.parse(str) 方法讀取 JSON 數(shù)據(jù),目前已經(jīng)得到大部分主流瀏覽器的支持(IE8+,F(xiàn)irefox 3.5+,Chrome4+/Safari4+,Opera10+),在不支持原生 JSON 對象的瀏覽器上面可以使用 parseJSON 方法進行讀取[1],parseJSON 采用解析器驗證讀入的代碼是否真的是 JSON 代碼,這樣就提供了較好的安全性。

        另外一個安全上的問題則是跨站請求偽造。這個問題在Javascript中的狀況是,由于Javascript采用了稱為“沙盒”的機制,它限制Javascript引擎僅能引入同一個站點的代碼,因而某種程度上提高了安全性。

        3.2 XML安全性

        XML被設(shè)計用來存儲和傳輸數(shù)據(jù),任何平臺上的程序都可以通過使用XML解析器來處理XML數(shù)據(jù),不僅僅是web應(yīng)用,還包括數(shù)據(jù)庫軟件、瀏覽器等等。由于XML的覆蓋面廣,很多軟件都是使用的同一款XML解析庫,如果這套解析庫存在漏洞,那么無疑又將影響的范圍擴大了。

        在XML解析的過程中,最常見的有三種漏洞:

        ◆拒絕服務(wù)漏洞

        ◆XML注入

        ◆XML外部實體注入

        但是可以通過XML加密,XML簽名,XML密鑰等手段來保證XML的安全性。

        通過上面的分析我們可以看出:就安全性而言,由于大部分Javascript庫都是使用eval()來解析數(shù)據(jù),存在執(zhí)行惡意JSON數(shù)據(jù)的安全漏洞;當然可以使用專門的JSON解析器來避免這個問題。相比,XML更安全一些。

        4 結(jié)語

        XML 和JSON 作為主要的數(shù)據(jù)交換格式,擇適合的數(shù)據(jù)交換格式對今后的數(shù)據(jù)轉(zhuǎn)換和應(yīng)用程序性能至關(guān)重要。通過上面的對比不難看出, JSON比XML更加適合在Web應(yīng)用中作為數(shù)據(jù)交換格式使用。除此之外,JSON規(guī)范簡單,易于學習,多種語言開發(fā)包使得它易于在項目中使用,無論是使用JavaScript還是其它編程語言,操作JSON的代碼都相對較少。JSON在WEB服務(wù)與數(shù)據(jù)存儲方面也有很大的發(fā)展空間。加上越來越多的AJAX應(yīng)用的出現(xiàn),JSON具有了更大的發(fā)揮其魅力的舞臺。正是如此,JSON已經(jīng)逐漸成為了WEB開發(fā)者的首選數(shù)據(jù)傳輸格式。

        參考文獻

        [1] JSON并沒有人們想象中的那樣安全,http://www.csharpwin.com/dotnetspace/1585.shtml

        [2] 王照.XML安全性研究與實現(xiàn)[A].同濟大學,2006.

        [3] 高靜、段會川. JSON 數(shù)據(jù)傳輸效率研究[A].計算機工程與設(shè)計,2011.

        [4] 楊樹林、胡潔萍.JSON數(shù)據(jù)交換格式及其在數(shù)據(jù)驗證中的應(yīng)用[A].北京印刷學院學報,2008.

        [5] 胡千里.比較XML與JSON在Web中的應(yīng)用[A].信息技術(shù),2011.

        [6] JSON, http://zh.wikipedia.org/zh-cn/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C

        [7] JSON: The Fat-Free Alternative to XML, http://www.json.org/xml

        猜你喜歡
        序列化瀏覽器解析
        三角函數(shù)解析式中ω的幾種求法
        如何建構(gòu)序列化閱讀教學
        甘肅教育(2020年14期)2020-09-11 07:58:36
        反瀏覽器指紋追蹤
        電子制作(2019年10期)2019-06-17 11:45:14
        睡夢解析儀
        電競初解析
        商周刊(2017年12期)2017-06-22 12:02:01
        相機解析
        Java 反序列化漏洞研究
        環(huán)球瀏覽器
        再見,那些年我們嘲笑過的IE瀏覽器
        英語學習(2015年6期)2016-01-30 00:37:23
        作文訓練微格化、序列化初探
        語文知識(2015年12期)2015-02-28 22:02:15
        亚洲av无码一区二区三区鸳鸯影院| 国产丝袜精品丝袜一区二区| 亚洲中文字幕有码av| 一区二区激情偷拍老牛视频av| 偷拍一区二区三区四区| 久久亚洲欧美国产精品| 免费a级毛片无码a∨男男| 亚洲av日韩av综合aⅴxxx| 老熟妇高潮av一区二区三区啪啪 | 久草视频在线这里只有精品| 国产黄a三级三级三级av在线看| 久久亚洲成a人片| 中文字幕人妻乱码在线| 夜晚黄色福利国产精品| 亚洲熟妇丰满多毛xxxx| 国产超碰人人模人人爽人人喊| 窄裙美女教师在线观看视频| 久久天堂av综合合色| 丰满少妇被猛进去高潮| 午夜无遮挡男女啪啪免费软件| 亚洲另类精品无码专区| 精品人妻av区乱码| 中文字幕在线亚洲精品一区| 欧美牲交a欧美牲交aⅴ免费下载| 少妇无码吹潮| 亚洲国产精品500在线观看| 女同中文字幕在线观看| 自拍偷自拍亚洲精品第按摩| 亚洲国产精品成人综合色| 色婷婷欧美在线播放内射| 老肥熟女老女人野外免费区 | av免费在线播放视频| 国产精品无码无在线观看| 欧美大香线蕉线伊人久久| 日韩精品视频在线一二三| 久久亚洲精品国产av| 国产精品国三级国产av| 日本少妇人妻xxxxx18| 精品少妇后入一区二区三区| 久久亚洲中文字幕乱码| 妺妺窝人体色www看美女|