EPUBフォーマット

EPUBってきいてピンとくる方はどのくらいいるのでしょう。
EPUBは、電子書籍の配布で利用されるフォーマットの1種です。
EPUBは「電子出版」を意味する「Electronic Publication」からとった名称で、国際電子出版フォーラム(International Digital Publishing Forum、IDPF)が策定した、オープンフォーマットの電子書籍ファイルフォーマット規格です。

技術的にみると、EPUBは主に XHTML と CSS (Cascading Style Sheets) に依存して電子書籍を構築します。
そんなフォーマットですので、EPUBを表示することになる機構は結果としてWebブラウザに搭載されているレンダリングエンジンのような仕組みの利用が必要となります。

電子書籍リーダーにはいろいろなタイプのものがあります。
比較的単機能な書籍閲覧のみしかできないものもあるでしょうし、ほぼスマホやタブレットと同等の機能を搭載した多機能の端末もあるでしょう。
多機能な端末には、まぁだいたいWebブラウザも搭載されているのではないでしょうか。
そんな多機能な端末上の電子書籍リーダーを私が作ることになったら、どういう戦略をたてるでしょう。
まぁ間違いなく、Webブラウザのレンダリングエンジンをそのままモジュールとして活用してEPUBを表示することを考えるでしょうね。

Webブラウザにはこれまで非常に多数の脆弱性が確認されてきています。
これは皆さんのご存じの通りです。
HTMLやCSSなどの自由度があまりに高いことで、少しの工夫で思いもよらない使い方ができるわけです。
では、これまでに発見された多くの脆弱性は、そのWebブラウザのどの部分でどのように対策されてきたのでしょうか。
HTMLなどの解釈に使用される機構の問題は普通に考えればその解釈を実施している部分で実施されるべきです。
ですが、ソフトウェアの設計ということで考える場合、解釈を実施する前処理として安全性を高める機構を実装することもできると思うのです。
まぁ、どのようにしてその脆弱性に対して対応しているのかはこの際一旦おいておくとしまして、Webブラウザとしてはそのどこかで脆弱性に対応してくれればよいわけです。

さてここで質問です。
EPUBをサポートした電子書籍リーダーはいかがでしょう。
きっと多機能端末のリーダーはその環境にあるWebブラウザのレンダリングエンジンを使うことでしょう。
では、HTMLなどの解釈に際して必要とされる安全機構は、そのレンダリングエンジンそのものに施されているのでしょうか。
もしそうでないパターンがあるとしたら、脆弱性対策を提供できていない場合のWebブラウザのように、その電子書籍リーダーも脆弱といえるでしょう。

さらに嫌な点としては、EPUBが特定の企業が策定したものでなく、公の団体が作ったオープンなフォーマットであるという点です。
オープンなフォーマットとはなんでしょう。
仕組みも公開されていますし、変換機構も広く出回っています。このため、一般の方(出版社などの立場でない人)がEPUBで文書を公開することができるのです。
一般の方が文書を公開するとき、どうするでしょうか。
その人が自分で公開しているホームページでダウンロードできるようにするかもしれません。
何かの掲示板に掲載されることもあるでしょう。

これって、悪意あるEPUB文書を作れた時に、かなり自由度高く配布できる環境に思えます。

脆弱なアプリに対しては公式サイトを経由して入手しよう、などの作戦で対応していくことも考えられます。
しかし、EPUB文書にはいわゆる公式サイトというものはない感じなのです。
EPUBの公式文書、EPUBの野良文書、なんか変です。
EPUBの公式文書って、いったいなんでしょう。

わたしは機能のあまり多くない電子書籍リーダーを利用しています。
これまで読む対象の電子書籍のフォーマットがなんなのかあまり考えてきませんでした。
考えたとしてもせいぜい自分のリーダーで読めるフォーマットなのかどうかくらいしか興味がありませんでした。
でも今後はもう少し考えることが増える気がします。

なんだかモヤモヤした気分です。

参考記事(外部リンク):EPUB vulnerabilities: Electronic reading systems riddled with browser-like flaws
portswigger.net/daily-swig/epub-vulnerabilities-electronic-reading-systems-riddled-with-browser-like-flaws