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

