システム開発とセキュリティ(4)
ECMAScript
ECMAScriptの概要
- Ecma Internationalによって標準化されてるJavaScriptの仕様のこと
- 仕様:ECMAScript
- 実装:JavaScript
- ISO/IEC 16262として標準化
- 日本もJIS X 3060としてJIS化
ECMAScriptの特徴
- スクリプト言語
- インタプリタ型の言語
- オブジェクト指向言語
基本的な記述方法・規則
HTMLへの組み込み
ECMAScriptをHTMLに組み込むには<script>タグを用いる
ステートメント(文)の記述における規則
文末にセミコロン(;)をつけるが、必須ではない
セミコロンで文末であることを認識するが、省略することも可能
省略された場合、ECMAScriptの処理環境が文脈から文末を判断し、補完する
文の途中に「空白」「改行」「タブ」を含めることが可能
ECMAScriptでは、文の途中の空白や改行、タブは無視される
例外
- 数の戻り値をセットするreturn命令については、末尾のセミコロンが自動的に補完されるため、途中で改行することはできない
- 文字列リテラルの途中で改行することはできない
大文字、小文字が区別される
メソッドや変数名等の大文字、小文字は区別される
変数の定義における規則
変数は「var」を用いる
- ECMAScriptでは、「var」を用いて変数を定義する
⇒ var msg = "ABC" - 「=」によって右辺の値が左辺に初期値として格納される
- 未設定の場合「undefined value(不定値)」という値が変数に格納される
変数の定義を省略することが可能
- 変数の定義を省略した場合は、はじめて値がセットされたときに自動的に変数がセットされる
- ただし、「var」を使用せずに定義された変数はすべてグローバル変数として解釈される
データ型における規則と特徴
データ型の種類
- 基本型と参照型がある
- 基本型:値そのものが格納される
数値型、文字列型、真偽型など - 参照型:値を格納しているメモリアドレスが格納される
配列、オブジェクト、関数など
データ型の扱いが柔軟
ECMAScriptでは数値を格納していた変数に文字列を格納してもエラーにはならず、正常に処理が行われる
文字列リテラルの処理における規則と特徴
シングルクォート( ' )かダブルクォート( " )で囲む
ECMAScriptで文字列リテラルを扱う場合、シングルクォート( ' )かダブルクォート( " )で囲む必要がある
メタキャラクタのエスケープ処理
ECMAScriptにおいて文字列リテラルにメタキャラクタを含める場合や外部からの入力値を文字列リテラルとして扱う場合は、メタキャラクタをエスケープ処理する必要がある
対象となる文字
※セキュリティ対策上最低限エスケープ処理が必要な文字は、シングルクォート、ダブルクォート、バックスラッシュ、改行の4つ
グローバル変数とローカル変数
グローバル変数
- 関数の内外にかかわらず、プログラムのどこまらでも参照・変更できる変数
- 関数の外で「var」を用いて定義する
- 「var」を使用せずに定義された変数はすべてグローバル変数として扱われる
ローカル変数
- 特定の関数内でのみ参照・変更できる変数
- 使用する関数の中で「var」を用いて使用する関数の戦闘で定義する
変数の取扱い グローバル変数はプログラムのあらゆる場所からいつでも変更が可能なため、サブプログラム間の依存度を高め、プログラムの挙動を複雑にしてしまう そのため、バグの温床になりやすい 特に、「var」を使用せずに定義されたグローバル変数は発見が困難なバグを作り出す大きな要因となるため、避ける |
クッキー
ECMAScriptでクッキーを取り扱う場合「document. cookie」プロパティを使用する
関連技術
Ajax(Asynchronous JavaScript + XML)
非同期通信を利用してデータを取得したり、動的にウェブページの内容を書き換える技術のこと
新しい技術というより、JavaScript や XML、CSS、JSONなどの既存の技術を組み合わせたもの
中心的な技術はJavaScriptで、非同期通信はJavaScriptのXMLHttpRequestによって行なわれる
非同期でサーバと通信して、ファイルの内容を取得したり、PHPなどのプログラムの出力結果をテキストやXMLなどで受け取ることが可能
サーバからの受信したデータはDOM経由でページに反映する
XMLはタグの記述によってデータが肥大化することや、DOMの操作も複雑になりがちであるなどの理由から、最近ではXMLに代わってJSONが広く利用されている
Google マップに利用されている
DOM(Document Object Model)
HTML文書やXML文書を構成するテキスト、タグ、属性などの各種要素をオブジェクトとみなし、それらの論理的構造やアプリケーションから操作するための仕組みのこと
XMLHttpRequest
JavaScriptなどのWebブラウザ搭載のスクリプト言語でサーバとのHTTP通信を行うための、組み込みオブジェクト(API)
すでに読み込んだページからさらにHTTPリクエストを発することができ、ページ遷移することなしにデータを送受信できるAjaxの基幹技術
XMLHttpRequestを利用したWebアプリケーションは非常に多く存在する
(例:Google マップ、Facebook)
Same-Origin Policy(同一生成元ポリシ)
JavaScriptと同時にウェブブラウザに導入されたセキュリティ上の考え方で、コンテンツがブラウザに来る源泉(origin)に基づいて整理して、外部からの干渉を防ごうとする
ホスト、スキーム、ポートの3つを一組としてすべて一致するとき同一とみなす。
例)次のものは同一のところから来たと扱われる
・http://example.com/
・http://example.com:80/
・http://example.com/path/file
次のものは、お互いに別のところから来たと扱われる
・http://example.com/
・http://example.com:1234/
・http://www.example.com/
・https://example.com/
・http://example.org/
異なる源泉から来たコンテンツについて、ブラウザ(正確にはユーザーエージェント)はセキュリティ上の干渉を阻止するため、さまざまな制限を行う。以下は一例である
・XMLHttpRequestによる取得の禁止
・スクリプトによる別のoriginであるiframeやwindowに対する操作の制限
・Canvasへの一部の操作の制限
この制限がない場合、ログインしないとみることのできない情報のあるサイトにログインしているとき、ほかの生成元のサイトからそれを取得されるなどの危険が生じる
JSON(ジェイソン、JavaScript Object Notation)
軽量なデータ記述言語の1つ。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。
表記方法
- オブジェクトは"{"で始まり"}"で終わる
キーと値のペアをコロン(:)で対にして、これらの対をカンマ(,)で区切ってゼロ個以上列挙する
キーとして使うデータ型は文字列に限る - 配列は"["で始まり"]"で終わる
- 「名前(キー)」はダブルクォート(")で囲む(シングルクォートは使用不可)
- 「値(データ型)」として使用可能なのは
- 文字列
- 数値
- true/false(小文字表記)
- null(小文字表記)
- オブジェクト
- 配列
- 数値は10進数(整数、少数、指数)のみ使用可能で8進、16進法表記などはできない
JavaScript(ECMAScript)では、JSONデータ全体を()でくくってeval関数に引き渡すことによって解析され、個々のデータにアクセスすることが可能とる
eval関数は、与えられた文字列の中からスクリプトを検索し、実行する。便利ではあるが、悪用されると第三者によって不正なスクリプトが実行されてしまう可能性がある
JSONP(JSON with Padding)
scriptタグを使用してクロスドメインなデータを取得する仕組みのこと。HTMLのscriptタグ、JavaScript、JSONを組み合わせて実現される
【仕組み】
ブラウザなどに実装されている「同一生成元ポリシ」という制約により、Webページは通常、自分を生成したドメイン以外のドメインのサーバと通信することはできないが、HTMLのscriptタグのsrc属性には別ドメインのURLを指定して通信することができるという点を利用することによって別ドメインのサーバからデータを取得することが可能になる。これを利用した方法
【注意点】
JSONPでは「Same-Originポリシ」が適用されないため、個人情報等を含むJSONデータが第三者に悪用される可能性がある。JSONP型データをブラウザに送信する前に、認証情報やReferrerヘッダ等を用いてリクエストが正規のものであることを確認するなど、有効な対策を検討・実施する
SQLを用いたデータベース操作において、セキュリティ上重要なもの⇒「GRANT」、「REVOKE」
- GRANT
ユーザに対し、テーブル、ビューなどのオブジェクトに関する特定の権限を付与する
- REVOKE
ユーザに既に与えられているテーブル、ビューなどのオブジェクトに関する特定の権限をはく奪する
基本的な構文等は「基本情報技術者試験」⇒「データベース」⇒「」SQLの記述方法」⇒「アクセス権」を参照
 

