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

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

この記事を読むのに必要な時間:およそ 1.5 分

前回までは,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+"')");

著者プロフィール

栗栖義臣(くりすよしおみ)

TIS株式会社 主任。鹿児島県出身。大阪大学大学院工学研究科にて原子力工学を専攻。卒業後,TISで主にJavaの開発案件に携わる。 SUN × Recruit主催のmash up award 2ndにて「サグール賞」「きざし賞」「特別賞」を受賞(asso-ball.networdarium.net)。iGoogleガジェットコンテストで「特別賞」を受賞(U.T.)。ブログは「でぃべろっぱーず・さいど」。

URLhttp://dev.chrisryu.com/

コメント

コメントの記入