書籍購入:組み込み系の人から見た『体系的に学ぶ 安全なWebアプリケーションの作り方』の意義

事あるごとに自身について「組み込み関係のプログラマ」とか「Cプログラマ」と書いている人が仕事絡みで本書を購入しただなんて、まるでWebプログラミングの世界に転身したかのようだが、そんなことは全くない。

仕事でCGI回りに触れることになった(でもやること自体は組み込み開発)のだが、全くもって未体験の分野なので全体像を把握する為に買ったのだ。

組み込み機器とWebアプリケーションは意外と深い関係にある。例えばネットワーク機器の類は以前からWeb設定機能が組み込まれている。ブロードバンドルータが身近な例だろう。

少し前から、それまでスタンドアローンだった組み込み機器*1がネットワークに接続するようになってきた。ネットワーク機器を除けば、当初から機器がクライアントとして振舞う構成が多かったように思う。この流れは「クラウドクラウド!」な今日も基本的には変わっていない。

しかし無線LANの普及とiPhoneiPadの登場で少し事情が変わった。機器をiPadで操作するみたいなパターンだ。この場合は機器がサーバとして振舞うことも多い。

この手法は、よく考えるとメーカーとユーザの両方にメリットがある。メーカーは今まで限られたボタンや表示機能というハードウェア制約上で頑張ってきた(ユーザから見て)複雑な操作方法とは別に、例えばiPad上に直感的で使いやすいUIを構築して提供できる――ハードウェアの費用を発生させることなく、だ*2。しかもこの方法が主流になれば、将来的にハードウェア本体側のLEDやボタン、リモコンが不要になり、結果として部品を減らせるかもしれない*3。ユーザは今までの組み込み機器にありがちな複雑な操作方法から解放されるかもしれない*4

機器をiPadからコントロールするとしよう。今はiPad側に専用のアプリケーションを用意することが多いが、よく考えれば要求さえ満たせるのなら機器側にHTTPサーバを仕込んでリッチなWebアプリケーションとしてGUIを構築しても問題ない。HTTP + CSS + JavaScriptでもそれなりにリッチなUIを構築できるし、ここ数年はモバイル向けにも使用できる便利なライブラリが揃っている。

機器側もARMなどの「今までより性能が向上していて且つ低消費電力」なプロセッサの普及で以前よりハードウェア性能が向上している*5。組み込みLinuxともなればlighttpdに始まる軽量サーバや消費リソースが少なめなFastCGIといった既存のアプリケーションやライブラリが存在する。必要ならソースに手を加えてもよい*6。既存のWebアプリケーション開発に近い感じで開発を進められる下地ができてきたように思う。

もちろんハードウェアリソースが限られているので、例えば現状ではPHPPerlを機器に組み込むなんて大抵は非現実的だろう。リアルタイムにハードウェアを操作するのなら、例えばFastCGI経由でCやC++で書いたプログラムにアクセスする方法が現実的だろう。具体的な技術要素はどうしても異なる。

それでも、こうなってくると組み込みプログラマといえども分野によってはWebアプリケーション開発の知識が必要となる。もちろんセキュリティも、だ。特に「何らかの形でハードウェアを操作する」という性質上セキュリティに関しては神経質になるし、何か問題があった場合に通常のWebアプリケーションとは異なりユーザ自身にアップデートを実施してもらう必要がある*7

しかもハードウェアの制約で通常のWebアプリ開発で使用する言語やライブラリ、フレームワークが使えないとなると、セキュリティ問題について、

  1. その脆弱性はどういう原理で発生するのか?
  2. その脆弱性を回避する為の基本的な考え方は?

こういった部分をキッチリと押さえておかなくてはならない。何故なら脆弱性を回避する為の具体的な処理を自前で書くこともありえるからだ。

そういった事情からすると、Webアプリケーションの各脆弱性について根本的な所から解説している本書は非常に有用な本だ。「とりあえずこうすればOK」な本では、そのアプリやフレームワークを使えない状況では役に立たないことも多いのだ。

ということで『体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践』は組み込みプログラマ的にもおススメな1冊だと主張しておく。まあ読んでいて「少しはPHPの読み書きができたらなあ、自分」と思わなくはないけど、とりあえず気合で何とか誤魔化せるレベルみたいなので何とかなる。

*1:とはいっても実際にはシリアルやUSBでPCと接続するパターンも多かったのだが。

*2:なぜならそのiPadはユーザが購入しているから。

*3:仮に開発した機器が10万台売れるとして、1台の製造コストを10円減らせば利益が100万円増える。なので自動車を含めて製造業では部品数を減らすべく知恵を絞ってきた。まあ本体に全くボタンが無いとかは無理だろうけど、リモコンを別売りオプションにするとかなら将来的にありえそう。

*4:私なんて未だに会社の電話機で電話を受けたり掛けたり保留したりする以外の操作がおぼつかない。内線とか転送とか無理。

*5:もちろん「全ての分野で」ではないけど。

*6:とはいえライセンス絡みで面倒な場合もあるので、簡単に「ソースを弄って……」とは言えないこともある。

*7:自動アップデートという方法もあるけど、サーバの用意や維持(メンテ)は外部に出しても定期的にコストが発生するし……。