Aptana JaxerでサーバサイドJavaScriptを始めてみよう!

第6回Jaxerのセキュリティ・パフォーマンスについて

前回までは、Jaxerの紹介や、サンプルアプリの作成、そしてAmazon EC2での公開の手順を解説してきました。

最終回となる今回は、Jaxerのセキュリティとパフォーマンスについて、そしてJaxerの今後のロードマップについて解説したいと思います。

Jaxerのセキュリティ

近年、アプリケーションに対するセキュリティ要件はますます高くなっています。セキュリティ、といっても様々な切り口があります。

Jaxerのセキュリティについては、公式サイトにその見解がまとめられています。

その内容を簡単に解説します(フレームワークとして当たり前のことも書かれていますが、その点は「当たり前のことがちゃんとできている」というふうに読みとってください⁠⁠。

複雑な処理のラッピング

Jaxerは、クライアントとサーバ間の通信をフレームワークでうまくラッピングしています。クライアントから送信したものと、サーバで受け取るもののミスマッチをなくしています。

具体的には、hoge(str)関数がサーバサイドで定義されているとして、クライアントサイドからこの関数を呼び出すとき、

hoge('ほげ');

と書けば、引数の文字列は自動的にエスケープされ、サーバサイドの関数では引数に「ほげ」という文字列が入ってきます。

クライアントとサーバ間でのデータの受け渡しについて、余計な気をつかう必要が極力ないように設計されています。

サーバサイドに定義された関数の隠蔽

サーバサイドで定義された関数は、その中身をエンドユーザが知ることはできません。

JavaScriptは、そのソースコードがエンドユーザに丸見えになるものですが、Jaxerのサーバサイドで定義された部分は異なります。

<script runat="server-proxy">
  function hoge(){
        //ここに記述する内容は、実際に表示されるHTMLには出力されず、Ajaxでサーバのhoge関数を呼び出す処理だけが記述される。
  }
<script>

ただし、scriptタグのrunat属性がbothのものについては、サーバサイドでも動作する関数ですが、同様にクライアントサイドでも動作するものなので、エンドユーザが見ることができます。

この点に注意して、プログラムを書く必要があります。

サーバサイドに定義された関数の呼び出し

表示されているあるページは、そのページに紐付けられた関数しか呼び出すことはできません。つまり、そのサイト内の他のページで利用されているサーバサイドの関数は、明示的に共有(定義されている.jsファイルを利用するページで読み込む)しない限りは、呼び出すことができません。

Jaxer DB API

JaxerのDB APIはプリペアード・ステートメントを利用しており、SQLインジェクション攻撃を防ぐことができます。

DBアクセスするプログラムを書く際はこの点を意識しましょう。つまり、次のコードを、

Jaxer.DB.execute("INSERT INTO memo (contents) VALUES (?)",task);

以下のように書いてしまうと、プリペアード・ステートメントが提供されている利点が失われてしまいます。

Jaxer.DB.execute("INSERT INTO memo (contents) VALUES ('"+task+"')");

エラーメッセージ・エラーページ

Jaxerは、エラーメッセージの表示内容を制御することができます。

バージョン0.9.5の段階では、設定がデフォルトでエラーメッセージを表示するようになっており、例えばサーバサイドに以下のようなスクリプトを記述すると、

<script runat='server'>
     throw 'hoge';
</script>

エラーが発生し、画面に以下のようなメッセージが表示されてしまいます。

画像

これを表示しないようにするには、local_jaxer/config.js内のConfig.DISPLAY_ERRORSをfalseにしましょう(※//のコメントアウト文字列を削除するのを忘れずに⁠⁠。設定を変更後、サーバを再起動してアクセスすると、以下のような画面が表示されます。

画像

また、config.js中にある、Config.RESPONSE_ERROR_PAGEやConfig.FATAL_ERROR_PAGEを変更することで、エラーページを自作のページに変更することもできます。

Jaxerのパフォーマンス

Jaxerを利用する際に気になるのが、パフォーマンスです。

サーバサイドJavaScriptがどれだけ処理速度を出すことができるのか気になるところですが、ベンチマークの結果など、公開されている情報は残念ながらまだありません。

ただし、3月25日にリリースされたJaxerのバージョン0.9.5では、⁠パフォーマンスの向上」という項目で2つの改善点が挙げられています。

1つは、JaxerのコアがFireFox3 Beta3に基づいたものに変更されました。FireFox3では、アーキテクチャの変更が加えられ、高速化やメモリ使用の最適化が行われています。この変更により、Jaxerでも、高速化、メモリ管理の改善が行われました。

もう1つは、サーバサイドのスクリプトをバイトコードに変換するようになり、より高速に処理することができるようになっています。

おわりに

Jaxerに関する本連載も今回で最終回となりました。

駆け足でのかいつまんだ解説になってしまいましたが、Jaxerの魅力がみなさんに伝わっていれば幸いです。

Jaxerに少しでも興味を持っていただけた方は、本家AptanaのblogをRSSリーダに登録するなどして、定期的にチェックすることをおすすめします。

JaxerやAptana Stuidoのリリース状況、Jaxerを利用した簡易サンプルアプリケーションの紹介など、おもしろい情報が提供されています。

それでは、最後までお付き合いいただきありがとうございました!

おすすめ記事

記事・ニュース一覧