『JSON必知必ず会』学習ノート(一)
5901 ワード
JSONとは
JSONはJavascript Object Notationと呼ばれ、異なるプラットフォーム間でデータを転送するテキスト形式(データ交換フォーマット)です.よくあるデータ交換フォーマットはXML、JSONの2種類があります.私達は主にJSONを研究しています.
データ交換フォーマットは非常に重要で、開発者はそれらを使って異なるシステム間のデータ交換を実現する必要があります.
JSONはJavascriptオブジェクトの字面量に基づいていますが、どのプログラミング言語にも独立しています.本当に重要なのは表示法そのものです.だからJSONを学ぶ前にJavascriptを勉強する必要はありません.もちろん、Javascriptの基礎があれば、それに越したことはないです.
JSON文法
JSONでキーパッドペアを使ったデータ構造の例は以下の通りです.
以下の2つの表現はいずれもエラーです.
JSONデータ交換フォーマットは、独立したファイルとしてファイルシステムに存在することができ、ファイル拡張子は.jsonです.データを送るときは、受信者にどのようなタイプのデータがあるかを事前に通知する必要があります.この場合はメディアタイプにも関わらず、コンテンツタイプやMIMEタイプとも言われます.よくあるMIMEタイプはtext/htmlで、JSONのMIMEタイプはaplication/jsonです.
JSONデータタイプ
JSONにおけるデータの種類は、オブジェクト、文字列、数字、ブール値、null、および配列を含む.
オブジェクトの種類
JSONの中のオブジェクトタイプは非常に簡単で、JSON自体は対象であり、つまり一対の括弧
オブジェクトには複数のキーのペアが含まれます.キーは文字列でなければなりません.値は合法的なJSONデータタイプ(文字列、数字、オブジェクト、配列、ブール値またはnull)です.
JSONには文字列が必要で、ダブルクォーテーションマークでしか包みません.JSONでは、キーはすべて文字列タイプです.Javascriptではシングルクォーテーションとダブルクォーテーションを使っても違いがありません.しかし、JSONはJavascriptオブジェクトの字面量ではなく、Javascriptオブジェクトの字面量に基づいているだけです.
JSON解析器では、値が二重引用符で始まると、次の文字列のテキストが別の二重引用符で終わることが望ましい.この文字列自体に二重引用符が含まれているとエラーが発生する可能性があるということです.このとき、文字列の二重引用符を逆傾斜棒で変換します.
JSONの数字の種類は、整数、小数、負または指数とすることができます.
ブールの種類
JSONの中のブール値は小文字だけでいいです.trueまたはfalseは他のどの書き方でもエラーが発生します.
nullタイプ
JSONでは、nullを使って、何もない、存在しないという意味です.
この例では、相手は腕時計をしていないので、腕時計の色はありません.
配列は常に四角括弧
これらの値は任意の合法的なJSONデータタイプであってもよい.したがって、文字列で構成される配列、数字で構成される配列、論理値で構成される配列、オブジェクトで構成される配列、さらには配列で構成される配列があり得る.
配列には異なるデータタイプの値も含まれています.
JSONモード(Schema)
JSONのデータはインターネットまたは他のネットワークを通じて受信者に伝送され、受信者は受信するデータに対して期待がある.受信者は予想されるフォーマットを説明する文書を提供し、例を提供する.さらに、JSONモードは、送信側の他端に対しても受信者によって使用されてもよい.JSONモードは、データが要求に適合することを保証するために、データを受信する最初の行にあることが多い.
上記の方法を総称して「一致検証」と呼びます.ここで三つの方面の内容を検証します.値の種類が正しいかどうか――具体的には、1つの値が数字、文字列などのタイプ であることが規定されています.には必要なデータが含まれていますか?どのデータが必要ですか?必要でないものが です.値の形式は必要ですか?範囲、最小値、最大値を指定できます. JSON SchemaはJSONを使って書きます.完全なJSON Schema形式の文書は以下の通りです.
JSONにおける安全問題
JSON自体には安全問題は存在しませんが、webでJSONを使用すると2つの安全問題が発生します.
駅をまたいで偽造を要求する
クロスステーション要求偽造(CSRF)は、サイトのユーザブラウザへの信頼を利用して攻撃を開始する方法である.
この信頼は実はユーザーの登録証明書であり、ハッカーはユーザーの証明を得るために、ユーザーがサイトにログインした場合、大量の偽の「メッセージ・リマインダ」をユーザーに送信します.目的はユーザーにクリックさせるために、危険なシナリオを持ったウェブサイトにアクセスすることです.ユーザーがこのメッセージをクリックして警告し、悪意のあるサイトにアクセスすると、ハッカーはユーザーの敏感情報(登録証明書)を取得して攻撃を行うことができます.
CSRF をどう しますか?
まず、 をJSONオブジェクトに として けるべきです.そうすると、 は なJavaScriptではなく、スクリプトも み めなくなります.
を ぎ む
は、システム の を して、ウェブサイトに のコードを して します.
サイドスクリプト
クロススクリプト (XSS)は の である.JSONを するときによくあるセキュリティ・ホールは、JavascriptがサーバからJSON を し、JavaScriptオブジェクトに するときに する.
JavaScriptでは、
この を するために、
JSONはJavascript Object Notationと呼ばれ、異なるプラットフォーム間でデータを転送するテキスト形式(データ交換フォーマット)です.よくあるデータ交換フォーマットはXML、JSONの2種類があります.私達は主にJSONを研究しています.
データ交換フォーマットは非常に重要で、開発者はそれらを使って異なるシステム間のデータ交換を実現する必要があります.
JSONはJavascriptオブジェクトの字面量に基づいていますが、どのプログラミング言語にも独立しています.本当に重要なのは表示法そのものです.だからJSONを学ぶ前にJavascriptを勉強する必要はありません.もちろん、Javascriptの基礎があれば、それに越したことはないです.
JSON文法
JSONでキーパッドペアを使ったデータ構造の例は以下の通りです.
{
"name": "dawei",
"age":22,
"isMan":true
}
名前は常に二重引用符を付け、複数のキーはコンマで区切られます.以下の2つの表現はいずれもエラーです.
{ name: "dawei" }
これはJavascriptの対象です.JSONではありません.{ 'name': 'dawei' }
これもJavascriptの対象です.Javascriptオブジェクトの中でダブルクォーテーションの代わりにシングルクォーテーションを使用することができます.JSONデータ交換フォーマットは、独立したファイルとしてファイルシステムに存在することができ、ファイル拡張子は.jsonです.データを送るときは、受信者にどのようなタイプのデータがあるかを事前に通知する必要があります.この場合はメディアタイプにも関わらず、コンテンツタイプやMIMEタイプとも言われます.よくあるMIMEタイプはtext/htmlで、JSONのMIMEタイプはaplication/jsonです.
JSONデータタイプ
JSONにおけるデータの種類は、オブジェクト、文字列、数字、ブール値、null、および配列を含む.
オブジェクトの種類
JSONの中のオブジェクトタイプは非常に簡単で、JSON自体は対象であり、つまり一対の括弧
{}
に包まれたキーパッドのペアのリストである.オブジェクトは入れ子で使用できます.オブジェクトには複数のキーのペアが含まれます.キーは文字列でなければなりません.値は合法的なJSONデータタイプ(文字列、数字、オブジェクト、配列、ブール値またはnull)です.
{
"person":{
"name":"dawei",
"age":23,
"isBoy":true
}
}
文字列の種類JSONには文字列が必要で、ダブルクォーテーションマークでしか包みません.JSONでは、キーはすべて文字列タイプです.Javascriptではシングルクォーテーションとダブルクォーテーションを使っても違いがありません.しかし、JSONはJavascriptオブジェクトの字面量ではなく、Javascriptオブジェクトの字面量に基づいているだけです.
JSON解析器では、値が二重引用符で始まると、次の文字列のテキストが別の二重引用符で終わることが望ましい.この文字列自体に二重引用符が含まれているとエラーが発生する可能性があるということです.このとき、文字列の二重引用符を逆傾斜棒で変換します.
{
"promo":"He say \"Bob`s the best!\" at classroom"
}
数の種類JSONの数字の種類は、整数、小数、負または指数とすることができます.
ブールの種類
JSONの中のブール値は小文字だけでいいです.trueまたはfalseは他のどの書き方でもエラーが発生します.
nullタイプ
JSONでは、nullを使って、何もない、存在しないという意味です.
この例では、相手は腕時計をしていないので、腕時計の色はありません.
{
"freckleCount":0,
"fairy":true,
"watchColor":null
}
配列の種類配列は常に四角括弧
[]
によって包まれるべきである.配列の値はカンマで区切られます.これらの値は任意の合法的なJSONデータタイプであってもよい.したがって、文字列で構成される配列、数字で構成される配列、論理値で構成される配列、オブジェクトで構成される配列、さらには配列で構成される配列があり得る.
配列には異なるデータタイプの値も含まれています.
{
"eggCarton":["egg",null,"egg",5,"egg"]
}
これはJSONにおいても合法的ですが、私達はこのような使い方を避けるべきです.私たちが異なるデータ型の配列を含むJSONをJavascriptを使用しないシステムに伝達すると、解析時にエラーが発生する可能性が高いからです.JSONモード(Schema)
JSONのデータはインターネットまたは他のネットワークを通じて受信者に伝送され、受信者は受信するデータに対して期待がある.受信者は予想されるフォーマットを説明する文書を提供し、例を提供する.さらに、JSONモードは、送信側の他端に対しても受信者によって使用されてもよい.JSONモードは、データが要求に適合することを保証するために、データを受信する最初の行にあることが多い.
上記の方法を総称して「一致検証」と呼びます.ここで三つの方面の内容を検証します.
{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"Cat",
"properties":{
"name":{
"type":"string",
"minLength":3,
"maxLength":20
},
"age":{
"type":"number",
"description":"You cat's age in years.",
"minimum":0
},
"declawed":{
"type":"boolean"
},
"description":{
"type":"string"
}
},
"required":[
"name",
"age",
"declawed"
]
}
このファイルの中で、最初のキーの値はschemaファイルを宣言しました.第二キーのペアはこのファイルのタイトルです.第三キーのペアはJSONに含まれる属性が必要で、第四キーの値は指定に含まれる属性を指定します.属性値には、属性タイプ、属性に対する記述、値の範囲が示されている.JSONにおける安全問題
JSON自体には安全問題は存在しませんが、webでJSONを使用すると2つの安全問題が発生します.
駅をまたいで偽造を要求する
クロスステーション要求偽造(CSRF)は、サイトのユーザブラウザへの信頼を利用して攻撃を開始する方法である.
この信頼は実はユーザーの登録証明書であり、ハッカーはユーザーの証明を得るために、ユーザーがサイトにログインした場合、大量の偽の「メッセージ・リマインダ」をユーザーに送信します.目的はユーザーにクリックさせるために、危険なシナリオを持ったウェブサイトにアクセスすることです.ユーザーがこのメッセージをクリックして警告し、悪意のあるサイトにアクセスすると、ハッカーはユーザーの敏感情報(登録証明書)を取得して攻撃を行うことができます.
に が いサイトは のようなJSON URLを って な を します.[
{
"username":"dawei"
},
{
"phone":"555-555-555"
}
]
ここのJSONフォーマットは ですが、それは に です.JSスクリプトも できるので、ハッカーは に のサイトのスクリプトに できます.CSRF をどう しますか?
まず、 をJSONオブジェクトに として けるべきです.そうすると、 は なJavaScriptではなく、スクリプトも み めなくなります.
{
"info":[
{
"username":"dawei"
},
{
"phone":"555-555-555"
}
]
}
に、サイトは、post のみを し、 get を うべきである.これではハッカーは のURLを えなくなります.を ぎ む
は、システム の を して、ウェブサイトに のコードを して します.
サイドスクリプト
クロススクリプト (XSS)は の である.JSONを するときによくあるセキュリティ・ホールは、JavascriptがサーバからJSON を し、JavaScriptオブジェクトに するときに する.
JavaScriptでは、
eval()
を してこの を うことができる.var jsonString = '{"animal":"cat"}';
var myObject = eval("("+ jsonString +")");
alert(myObject.animal);
これは ないようですが、サーバーやサーバーから られてきたJSONが され、 のコードを っています.これは です.var jsonString = "alert('this is bad code')";
var myObject = eval("("+ jsonString +")");
alert(myObject.animal);
eval()
の は、 ってきた を にコンパイルして することにあります.そうすると、ハッカーに できる を えて、 もり な をもたらすかもしれません.この を するために、
JSON.parse()
を しました.この はJSONのみを し、スクリプトは されません.var jsonString = '{"animal":"cat"}';
var myObject = JSON.parse("("+ jsonString +")");
alert(myObject.animal);
…