2013年10月6日日曜日

node.jsのsailsフレームワークでドメインの制御

node.jsのsailsフレームワークは、流行っても一時だと思う。expressのラッピングとは聞いていたけど、node_modulesのexpressの中とかに入っていてイマイチexpressの拡張モジュールではなくて、ラップして名前を変えたのか理由が分らない。

で、今回はドメインを割り当てたんだけど、そのサーバはいくつかドメインを振っていて、nodeはwebとは違うポートをあててる訳。
で、そのポートだとその割り当てたドメインならなんでも閲覧出来ちゃう訳。つまりsailsはドメインによる制限がされてない。configで設定するところはあるけどね。

で、TODOがあって、

****Project/node_modules/sails/lib/express/index.jsに
// TODO: Add support for error domains
とかメモってあるのね。これがsails側のTODOなのかexpress側のTODOなのかも知らん

でもhostの制御ってcreateServerのリクエストを見ないといけないから、そこの記述してる部分じゃ制御できないと思うのよ。

で、createServerしてるとこが
if (sails.config.express.serverOptions) {
sails.express.server = createServer(sails.config.express.serverOptions, sails.express.app);
}
else sails.express.server = createServer(sails.express.app);
TODOのちょっと上の記述

で、sails.express.appの記述が

***Project/node_modules/sails/node_modules/express/node_modules/connect/lib/connect.js

function app(req, res, next){ app.handle(req, res, next);}

これね。ここでこのフレームワークの難解さが分る訳。もう、なんのFWの追加したモジュールに追記してるんだか。入れ子すぎる。いや、わかるんだけど、FWをラッピングってのが、そもそも異様だよね。PHPのシンフォニーもひどい印象あったけど、、、PHPとか有名なフレームワークでもヒドいコーディングが多いからシンプルな自社フレームワークを使う会社結構あるけど、node.jsも同じ状況でゴリゴリ肥大化してしまっているんじゃないかと思う...

まぁいいや、それで今後のアップデートを期待して今回はここに固定で肉付けね

  function app(req, res, next){
    //sails.log.debug(decodeURI(req.headers.host));
    if(decodeURI(req.headers.host) != "限定したいドメイン"){
      res.writeHead(404);
      res.end('404 not found');
      return;
    }
  app.handle(req, res, next);
  }

とりあえずこんな感じで書きました。だいたい予想だにしないドメインやポートでのアクセスを防ぐためなので、とりあえずsailsで決まったドメイン以外は404にしてくれればいいので、これでいいかな。

node.jsは、これからもっと普及していい感じのFWがでるといいっすね

今回FWつかって、足りない機能は結局ソース覗いて追記しないといけなくなって、これでどっかの会社組織で導入するってなると、やはりいくつかFWを覗いて、ソースを参考にして自社で必要最低限の自社FWを作るとかじゃないと、責任取れないと思う。とりあえずはおもちゃとしてガンガン使っていくしかない。今回のケースもしょっちゅうあると思うんだよね。

0 件のコメント:

コメントを投稿