Json 基础知识

Json 基础知识,工作中用到,简单了解下

一、 json 相关概念

json 插队学习

json是什么? json是一种数据交换格式

专业术语:

JSON: JavaScript对象表示法(JavaScript Object Notation )
表示法:一个用于表示诸如数字或单词等数据的字符系统
数据交换格式:用于在不同的平台或系统间交换数据的文本, 如xml json等
可移植性: 以一种对双方系统都兼容的方式在平台间传递信息 ?

json源于JavaScript的一个子集,但是json是独立于语言的
json表达数据的方式对通用的编程概念都很友好

二、 json的语法

1、 字面量

json 是基于JavaScript字面量的 ,可以理解为从字面上读出的一些属性或值

2、 名称-值对

即 一个名称加一个值

"animal":"cat" , animal 是名词,cat是值, json使用冒号 “:”来分割名称和值,名称始终在左侧,值始终在右侧

3、正确的json语法

名称: 始终需要加双引号,注意是双引号,可以是任何有效的字符串,如下面也是合法的:

    "my animal" : "cat"
    "Lindsay's animial" : "cat"

但是!!为了获得最大可移植性,最好不要加空格和特殊字符。
如果多个字符,建议这样写:

    "LindsaysAnimal" : "cat"
    "myAnimal" : "dog"

json使用 { } 加在名称-值对的两边,使之成为一个对象, 多个名称-值对间,使用逗号分隔。
如:

{"myAnimal" : "dog", "color":"black"}

4、json语法验证

一些工具或网站:
Json Formatter & Validator
Json Edit Online (http://www.jsoneditoronine.com
Json lint (http://jsonlint.com)

5 json 文件

以.json为后缀名

json中的数据类型

对象
数字 ( 整形 5, 浮点形 5.09, 定点形:??)
字符串
布尔型 (真或假)
数组
null

1 嵌套对象
使用嵌套对象来描述一个人:

{
    "person":{
        "name":"Lindsay Bassett",
        "heightInInches": 66,
        "head":{
            "hair":{
                "color": "light blond",
                "length":"short",
                "style": "A-line"
            },
        "eyes":"green"
        }
    }
}

错误的示例:

{
    "person": "say "bob is very tall " hello hah"
}
值中,双引号又使用了双引号

修改为(加转义字符\):

{
"person": "say \"bob is very tall \" hello hah"
}

下面示例错误:

{
    "dir": "c:\apache27"
}

修改为:
{
"dir": "c:\apache27"
}

需要转义的字符:

\"
\\
\/
\b   (退格符)
\f   换页符)
\t  (制表符)
\n  (换行符)
\r  (回车符)
\u   (后面跟16进制字符)

如下面正确示例:
{
"dir": "\sory , saf \n sfa"
}

JSON中其他数据类型: null,数组等

{
"hairy":false,
"count":1,
"wacthColor":null, #不带手表 无颜色特征
"hands":["lefthand","righthand"]
}

三 Json schema

什么是 Schema?
当我们在描述 文字链接 的时候,需要约定数据的组织方式,比如,需要知道有哪些字段,这些字段的取值如何表示等,这就是 JSON Schema 的来源。

我们以 文字链接 为例,它对应的 JSON Schema 大概如此:

{
 "type": "object",
   "properties": {
     "text": {
           "type": "string",
           "title": "文字"
       },
        "href": {
           "type": "string",
           "title": "链接地址(URL)"
        }
 }
}

JSON Schema 定义了如何基于 JSON 格式描述 JSON 数据结构的规范,进而提供数据校验、文档生成和接口数据交互控制等一系列能力。

它的特性和用途,可以大致归纳为以下几点:

1. 用于描述数据结构

在描述 JSON 数据时,如果数据本身的复杂度很高,高到三维四维,普通的标签函数已经无法表示这种层级结构了,而 JSON Schema 利用 object 和 array 字段类型的反复嵌套,可以规避掉这个缺陷。

当然,除了键值等基本信息,规范层面还提供了丰富的关键词支持,如果想通过自定义扩展字段,解决特定场景的业务需求,也是非常方便的。

2. 用于构建人机可读的文档

计算机领域有个概念叫做自描述。所谓自描述,可以理解为:文档本身包含了自身与其他文档交互相关的描述信息,不需要其他的配置文件或者额外信息来描述。

而 JSON Schema 就是自描述的,它本身就是一份很完善的说明文档,字段的含义说明、该如何取值、格式的要求等都清晰明了。

3. 用于生成模拟数据

通过标签函数生成模拟数据,只能解决基本的格式要求。比如 string 类型的字段,模拟出来的数据,无非是一个随机字符串。

但在 JSON Schema 中,由于字段的描述不仅仅是类型,更多的约束条件,可以确保模拟数据更接近于真实数据。

4. 用于校验数据,实现自动化测试

接口数据的校验工作,往往依赖于测试代码逻辑和用例。如果用 JSON Schema 描述一个数据接口,就不需要再编写测试代码了,所有的逻辑都可以移植到 JSON Schema 中维护。配合 jsv、tv4 等二方校验工具,接口测试可以真正自动化。

例子:

{
 "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "TextLinks",
    "description": "文字链接",
    "type": "array",
    "items": {
     "type": "object",
       "properties": {
         "text": {
               "type": "string",
               "title": "文字"
           },
            "href": {
               "type": "string",
               "title": "链接地址(URL)"
            }
     }
    },
    "maxItems": 10,
    "minItems": 5
}

其他信息 参考链接: https://blog.csdn.net/xiong9999/article/details/53688336

四、 JSON中的安全问题

服务端和客户端的关系: 可以理解为客户端为发生在浏览器端的一切。服务端,为发生在服务器端的一切。 包含大量的请求和响应

跨站请求伪造

跨站请求伪造,CSRF,cross-site request forgery, 读作 sea surf,是一种列用站点对用户浏览器信任而发起攻击的行为。 仅包括利用信任机制进行的攻击

利用json进行csrf攻击的例子:

json中保存敏感信息:
[
    {
        "user":"liliy"          
    },
    {
        "password" : "555-666-888"
    }
]
此json经过校验是合法的。
但是此合法的json非常危险的,被称为顶层JSON数组,很容易被黑客攻击。 

如何组织CSRF攻击?将顶层JSON数组放入到{}中,使其称为非法的JavaScript,
这样就不会被<script>标签加载。

{
    "info":[
        {
            "user":"liliy"          
        },
        {
            "password" : "555-666-888"
        }
    ]
}

下一步,网站应该允许post请求获取数据,禁止get获取数据
post用于提交数据,获得响应
get请求用于请求数据,得到响应

其他说法:
1、无论是get还是post,只要你的网站是对外访问的,请求总是难免的。
2、作为page中来允许其中的json调用,个人建议在page中先随机生成类似token的东东,然后放入到每个调用json的url中作为允许调用的key(设定生命周期)。
3、重复上面的话,被人恶意模拟调用终究是难免的,不过可以使用多种方式合并使用以此来提高此门槛(或直接使用session)。

注入攻击

注入攻击包含许多种形式与格式,均是利用系统本身的漏洞实现的

跨站脚本攻击

(cross-site scripting XSS), 注入攻击的一种。 javaScript中,可以使用eval()函数获取一段json字符串并对其进行编译和执行。
如果服务器发来的json代码被劫持,而注入其他恶意代码,eval()函数将会对注入的恶意代码毫无差别的进行编译和执行,访问者的浏览器中会编译和执行恶意代码

因此eval()函数的漏洞是公认的,目前使用json.parse()函数来解决这一问题,该函数仅会解析json函数,并不会执行

安全漏洞,决策上的失误

json中避免使用包含JavaScript、HTML的字符,可以进行转码

专业术语

  1. 服务端(Web开发中的):当网页或资源被请求时,在服务器上执行的一系列操作,服务器为互联网浏览器提供其处理和或加载的响应 / 。
  2. 客服端(Web开发中的);当浏览器所请求的页面加载完毕时执行的一系列操作。 通常是指 HTML、CSS和 Java Script
  3. **** :存在于json名称-值对之外的位于文档最顶层的json数组
  4. 跨站顶层json数组请求伪造(CSRF): 指利用站点对用户浏览器的信任进行的攻击。
  5. 注入攻击: 依赖于将数据注入到Web应用程序以方便恶意数据执行或编译的攻击。
  6. JSON跨站脚本攻击:通过截取或将站点中所使用的第三方代码更换为恶意脚本,来对站点进行的一种注入攻击
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,295评论 1 92
  • “主要对客户进行引导,介绍公司产品的工作。” 如果你工作经历描述这么清新脱俗言简意赅,请原谅HR没给你电话。 让数...
    撕兄阅读 418评论 1 9
  • 终日在烟雾中工作的人对身体有哪些危害?环境污染对人体的危害主要有三个方面: (1)急性危害:污染物在短期内浓度很高...
    瑚楊AFPMCC阅读 5,469评论 0 0
  • 天上一轮弦月, 黑漆深幕弯弯挂立, 潜散一池的温柔明亮。 水中一叶清莲, 静静立于碧波微塘, 简撑片刻宽广与阴凉。...
    水木石阅读 214评论 0 0