JSONPは危険なので禁止
CORS問題でAJAXリクエストが失敗する場合の対策として、CORSを設定を紹介しているところまでは良いのですが、他のオプションとしてJSONPを挙げているページを見つけました。記事作成が2018年4月になっていたのでつい最近のことです。あまり知られていないようです。
誤解の無いよう正確に書いておきます。誰かに見られて困るデータが含まれる場合、JSONPは禁止です。
CORS問題でAJAXリクエストが失敗する場合の対策として、CORSを設定を紹介しているところまでは良いのですが、他のオプションとしてJSONPを挙げているページを見つけました。記事作成が2018年4月になっていたのでつい最近のことです。あまり知られていないようです。
誤解の無いよう正確に書いておきます。誰かに見られて困るデータが含まれる場合、JSONPは禁止です。
Webブラウザに対するJavaScriptコードのインジェクションは
で起きる可能性があります。ここでは主にクライアント側が関係するケースで注意しなければならない箇所を紹介します。
コンピュータで数値を正確に扱うのは「実は結構難しい」です。つまり「コンピューターは数値を正確に扱えない」という事です。「コンピューターが数値を正確に扱えない?!何を言ってるんだ?!」と思った方は是非読んでみてください。
以前にフレームワーク対決:Node.js+SailsとPHP+PhalconのベンチマークとしてPhalconとSailsのベンチマークを行ったのですが、Apacheを利用した場合のPhalconの性能が全く違うので取り敢えずブログに書きます。
このエントリはPhalcon Adventカレンダー17日目として書きました。少し前に設定がおかしいことに気づいて非公開にしていた物を修正しています。
Node.jsのMVCフレームワークであるSailsはインストールも簡単で、気軽に試せます。しかし、Node.jsはシングルプロセス&スレッドで動作するので今時のマルチコアCPUではその性能はフルに発揮できません。以前はNginxなどで設定するなど、色々面倒でしたがPM2を利用すると簡単にプロセス管理が行えます。もちろんSails以外のNode.jsアプリケーションのプロセス管理にも利用できます。
CasperJSやPhantomJSを使っていてシンタックスエラーがあると
[yohgaki@localhost ]$ casperjs test.js SyntaxError: Parse error
と表示するだけでエラー行を返してくれません。
Node.jsは速いと言われています。Node.jsのMVCフレームワークであるSailsとPHP最速フレームワークであるPhalconとの性能を比較しました。
Linux上のCasperJS/PhantomJS/SlimerJSからShift_JIS/EUC-JPのページを取り扱う事が出来なくて困っていたのですが、解決策が分かりました。
追記:最近のOWASPガイドの更新でJavaScript文字列はUnicodeエンコードで安全性を確保するよう変更されました。元々このブログでもUnicodeエスケープのまま利用するように書いています。他の言語のユーザーはUnicodeエスケープを利用しましょう。PHPもASCII領域の文字をUnicodeエスケープするようにした方が良いと思います。これは提案して実現するように努力します。
JSONはJavaScriptのオブジェクトや配列を表現する方式でRFC 4627で定義されています。メディアタイプはapplication/json、ファイル拡張子はjsonと定義されています。
PHPにJSON形式のデータに変換するjson_encode関数とjson_decode関数をサポートしています。
JSON関数がサポートされている話は簡単!となれば良いのですが、 いろいろ考慮しなければならない事があります。
json_encode()を利用する場合
$json = json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
と利用します。これでもまだ最適なエンコード方式とは言えませんが、デフォルトとして最低限必要なオプションが
JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT
です。
JSONデータの文字エンコーディングは基本UTF-8です。UTF-8文字データは”予めバリデーションしておく”必要があります。
もっと読むPhantomJSはWebKitを利用したヘッドレスHTTPクライアントです。Webアプリのテストのみでなく、WebページをPDFや画像に変換する為に利用している方も多いと思います。手元のFedora19を載せているマシンでは動作せず、原因と思われる物も分ったのでエントリを作りました。
もっと読む
RailsはJavaScript文字列エスケープメソッドをサポートしています。JavaScript文字列エスケープのエントリで様々な議論があったようです。弊社ではRailsアプリのソースコードも検査しているので、参考としてRailsのソースコードを確認したことを追記をしたました。Rails開発者に直して頂きたいので独立したエントリにしました。
参考:
JavaScriptの文字列をエスケープのエントリでJavaScript文字列をエスケープ後に直接出力するより、DOMから取得してはどうか?という提案があったのでエントリを作成しました。
Ajax普及目指すオープンソースプロジェクト「Open Ajax」をIBMやその他の会社がはじめた、とニュースリリースがりました。
ApacheとMozilla Pulicライセンスに基づき公開されるAjaxランタイムツールキットを提供するZimbraのサイトにデモアプリケーションがありました。メールとスケール管理のアプリケーションですが、ここまでやれば従来型のクライアントサーバ型アプリケーションと変わらない状態です。
http://zimbra.com/products/hosted_demo.php
「Skip Registration, go to Demo」ボタンを押せばデモアプリケーションを利用できます。日本語対応も考えられている(?)らしく日時は日本語で表示されていました。
オープンソース化されるツールキットはこちら。
http://zimbra.com/community/ajaxtk_download.html
ページを見れば分かりますが、ApacheかMPLのどちらかのライセンスを選択できるようになっています。
参考
http://zimbra.com/community/open_ajax.html
http://www.itmedia.co.jp/enterprise/articles/0602/02/news011.html
JavaScript/DOMを使ったメニュー生成やフォーム選択状況に応じて適切なメッセージを表示するダイナミックコンテンツは多くありましたが、よりインタラクティブなHTMLコンテンツがどんどん増えそうです。
AJAX = Asynchronous JavaScript + XML
XMLHttpRequestを使った方法ですが、非常に新しいと言うことではないのですが最近急に注目されはじめました。
はやりgoogleのせい?