RECiPE)を読んでいると、P.618でJSON形式のデータをAjax通信で読み取るコードが2つのPHPファイルを使って紹介されています。APIを理解する上で重要な事項であると感じましたので解説をいたします。このブログは以下のサイト・ページを参考にしています。jQueryでは、クロスドメインなAjaxを行った際にはリクエストヘッダにX-Requested-Withが付かないようだ。合わせてこの記事では2つのPHPファイルでGitHubにアップしている、ajax.phpとjson.phpに基づいて説明を進めてまいります。ajax.phpについてJSON形式のデータが記述されているPHPファイルに直接アクセスしても、そのデータを取得することはできません。XMLHttpRequestオブジェクトを用いてAjax通信で取得する必要があります。XMLHttpRequestオブジェクトを用いてAjax通信を行うと、X-Requested-Withという特別のヘッダがついたJavaScriptファイル以外は読めなくなるため、JSONハイジャック対策に有効です。XMLHttpRequestオブジェクトについてしたがってまずjsファイルでXMLHttpRequestオブジェクト(とそのデータ)が必要となります。ajax.phpを用いて説明すると以下のブロックです。});XMLHttpRequestオブジェクトのデータを取得・表示$.getJSONメソッドは、戻り値としてXMLHttpRequestオブジェクトを返します。引数は読み込むページを指定し、第二引数は通信成功時のコールバック関数となります。...}のブロックの内容となります。inputタグのボタンを押すと、画像のようにメニュー・価格・注文数が表示されます。json.phpについてjson.phpはajax.phpより簡単そうに見えますが、前提となる知識がないと意味がよく分からないと思います(かく言う自分も意味が分かりませんでしたが)。$_SERVER[‘HTTP_X_REQUESTED_WITH’]についてまず4行目の$_SERVER[‘HTTP_X_REQUESTED_WITH’]は、PHPの公式ドキュメントにおいて定義済みの変数として存在しません。存在していないため、5行目で定数の名前が’XMLHttpRequest’となることもありません。したがってjson.phpに直接アクセスしても、上記の画像のように”ひらがなと漢字を表す正規表現が返されプログラムの実行が停止されます。配列のデータにアクセスすることはできません。XSS対策1つ目のheader()関数は、引数の中に”application/json”とすることでjson形式のデータしか読みませんという宣言です。これでtextタイプのデータは読めなくなります。2つ目のheader()関数は、引数の中に”application/json”とすることでJSONをJavaScriptで解釈不能、あるいは実行時に解釈不能とするという意味です。2つのheader関数を用いることでXSS対策となります。JSON_HEX_AMP);json_encodeのオプションでエスケープしていますが、このエスケープがなくても、配列値である$valueは正規表現で返されて読み取りがかなり困難であることが分かります。検索検索なかの人Webサービス開発者&ドットインストール学習者&個人事業主&ねこ。