SSTエンジニアブログ

SSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。

書籍「Webブラウザセキュリティ」発刊記念 著者&レビュアー対談(前編)

こんにちは!CTOのはせがわです。

今年1月に、ラムダノートさんから「Webブラウザセキュリティ」という本が出版されました。

Webブラウザセキュリティ ― Webアプリケーションの安全性を支える仕組みを整理する
  • 米内貴志 著
  • 224ページ
  • A5判
  • ISBN:978-4-908686-10-8
  • 2021年1月5日 第1版第1刷 発行

昨秋、著者の米内貴志(つばめ)さんにお願いされてこの本のレビューを行ったこともあり、出版記念ということで同じくレビュアーだったにしむねあさん、キヌガワマサトさんもお招きして4人でこの本やWeb技術周辺についてワイワイと話をしましたので、2回に分けてその模様をお届けします!

レビュー楽しかったですね!

はせがわようすけ
はせがわようすけ

みなさんお忙しいのに呼びつけてすみません。
会社でエンジニアブログを書かないといけないんだけど書くためのネタが全くなくて、ちょっとみなさんの力を使って書こうかなと。

にしむねあ
にしむねあ

みんな、はせがわさんに言われるとNoとは言えないくらい統制されてますから大丈夫です。

はせがわようすけ
はせがわようすけ

また~。そういうの文字起こしすると誤解されちゃうじゃないですか。

つばめ
つばめ

ちゃんとそういう関係性を文字にして残しておかないと。

にしむねあ
にしむねあ

Webセキュリティ界隈って、上下関係が厳しいんだなっていうことがわかるように、ちゃんと文字に残してもらわないと。

キヌガワマサト
キヌガワマサト

(全力で頷く)

はせがわようすけ
はせがわようすけ

ちょっとw
えっと、本題に入れない。っていうか本題なんだっけ。そうそう、つばめの書いた本の話。
この本、レビューの話が来たじゃないですか。
レビューとかなかなか時間とれなくて正直しんどいなと思ってたんですよ。けどやってよかったなと思いますよ。

にしむねあ
にしむねあ

おもしろかったですよ、レビュー自体も。

つばめ
つばめ

そうおっしゃって頂けるのがめちゃくちゃうれしかったです。
書いてて、見せて「これブラウザハックのパクリじゃん」って言われたらどうしようかなと思いつつ。

ブラウザハックとの違い

にしむねあ
にしむねあ

俺たちの監訳したブラウザハックよりも、立派な表紙で作りやがって…、とかね。

つばめ
つばめ

ははは、たしかに、ブラウザハックの表紙よりは書き込みも多いかもしれないですね

はせがわようすけ
はせがわようすけ

あちこち誤記訂正も少なそうだしね。

キヌガワマサト
キヌガワマサト

ブラウザハックはもうちょっと具体的な攻撃方法、こうするとできますよみたいなのが多いですよね

にしむねあ
にしむねあ

今回は作る側の本ですよね。ブラウザーにはこういう技術があるから、ちゃんと理解して安全なアプリを作ろうね、って開発者に訴えかけてる。

つばめ
つばめ

そうですね!

にしむねあ
にしむねあ

ブラウザハックより売れるんじゃないですか

つばめ
つばめ

なんですぐそうやって売り上げ、お金の話になっちゃうんですか
今日は技術の話じゃなくお金の話だけしますか?

はせがわようすけ
はせがわようすけ

にしむねあさんがいたらどうしてもお金の話になってしまうよね。パンのレビューから成りあがった男だから。
話をもどして、この本がいいなと思ったのは、「はじめに」のところでなぜこの本がいるのかの立ち位置を明確にしてる、あれがすごくいいなと思って。
ブラウザハックは書きたくて書いたっていう趣味の本という向きが強くて、たしかに勉強にはなるけどどういう人が読む本なんだろってのがあって。
けどこの「Webブラウザセキュリティ」は「こういうために書いてます」ってのが明確になっていて、体系化して書かれてるのがわかるので、「はじめに」を読んだ時点でこれは良さそうな本だって思えるんですよね。まるで「はじめに」しか読んでないみたいな感想ですけど。

キヌガワマサト
キヌガワマサト

人に薦めやすい本だと思いますよ。

つばめ
つばめ

いやー、ありがたいですね(満面の笑み)

はせがわようすけ
はせがわようすけ

キヌガワさん、薦める人周りにいます?

キヌガワマサト
キヌガワマサト

いや、今はいないですね…。セキュリティキャンプとかやってる時なら、事前に読む本として薦める気がしますね

つばめ
つばめ

めちゃめちゃ嬉しいですね。僕今日ずっとここでニヤニヤしてればいい役割ですか?褒められてニヤニヤしながら「ありがとうございます」だけ言っておけばいいですかね

レビュー振り返り

はせがわようすけ
はせがわようすけ

これ、レビュー開始するときに、他に誰がレビューするって聞いてなかったじゃないですか

つばめ
つばめ

そう、たしかにお願いするときに誰と誰がレビューするってお互いには伝えてなくて。

はせがわようすけ
はせがわようすけ

そう、で、(Google Drive上で)レビューしてる途中にぱっとみたらにしむねあさんからのコメントが入り始めたのに気づいたので、にしむねあさんがいるのなら、もう細かなところはオレ見なくていいやって思って。スペックに沿ってないとかつづりを間違えてるとかはきっと俺より細かく気付いてくれるだろうって思ってみるのをやめた笑

にしむねあ
にしむねあ

自分はそのために呼ばれたんだろなと思って、細かく見てました。「はせがわさん、ここ見落としてちゃ駄目だぞ」なんて思いながら指摘してたんですが、そのあとキヌガワさんがレビューに入ってきて、今度は自分が見落とした間違いをたくさん指摘してくれていて。

つばめ
つばめ

いやー、レビューがバグハンターでしたよね、完璧に。

はせがわようすけ
はせがわようすけ

細かな尻ぬぐいを全部キヌガワさんがして回ってるみたいなレビューコメントになってましたね

キヌガワマサト
キヌガワマサト

いやいやいや、にしむねあさんが重要なところはほとんど全部指摘してたので、あとは細かなところを僕が見るだけで。

はせがわようすけ
はせがわようすけ

けっこう気づいて当然みたいなところをキヌガワさんが後から拾ってるのを見るとめっちゃ悔しいよね

にしむねあ
にしむねあ

あったあった

キヌガワマサト
キヌガワマサト

ありました?

つばめ
つばめ

CSPの話でなんだったかのディレクティブの数字が違うとか

はせがわようすけ
はせがわようすけ

linkタグのなかでhrefじゃなくsrcとか書いてるやつとか

つばめ
つばめ

いやーでもあれ書いてるときは気づかないものですね。

キヌガワマサト
キヌガワマサト

でもあれ確か、スペックから引用してきて、スペックが間違えてたとかもありましたよね。

にしむねあ
にしむねあ

自分が目からウロコだったのは、1 章にある HTTP リクエストの概要の部分ですね。
HTTP リクエストはヘッダーとボディにより構成されます、という記述があって、自分は違和感なく読み飛ばしていたんですけど、キヌガワさんから、「最初の POST で始まる行はヘッダーではなく『リクエストライン』です」ってコメントが付いていて。

つばめ
つばめ

そう、確かにそうで、「知らんかった!」ってなりましたね

キヌガワマサト
キヌガワマサト

ちょっと違和感を覚えてw

はせがわようすけ
はせがわようすけ

あとおもしろかったのは占いの話

つばめ
つばめ

あれ面白かったですね。日本人と思われるキヌガワマサトさんに占いの話を突っ込まれるっていう

キヌガワマサト
キヌガワマサト

いやー、でもあれ一番わざわざコメントするか迷ったところだったんですけど、 ブログにも一番心に残ったって書いてあったので、何が心に残るかわからんなぁって思った

つばめ
つばめ

いや、でも全体に、マジでみなさん中身ちゃんと読んでくださったんだって思って。ソースコードとかそれこそsyntacticに文脈の理解はできるじゃないですか。けどソースコードの中、上に載っているデータまでちゃんと見られるんだって思って印象的でしたね。
もちろん他のコメントもひとつひとつが自分にはめちゃくちゃ勉強になるって思ったけど、やっぱり占いのが記憶には残りました。

本の内容は…

にしむねあ
にしむねあ

改めて、やっぱり言語化するのが難しいテーマの本ですよね。
Web セキュリティってサーバー側の記事はたくさんあって、ネットを調べたらすでにわかりやすく解説してくれ てる人がいますけど、この本が取り扱ってるブラウザーのセキュリティって、誰も文章として書いたことがないよ うなものが多かったと思います。
特に、第 3 章で出てくるプロセス分離の話は、web.dev と小勝くん*1ブログ記事くらいしか詳しい情報がなくて。
それくらい情報がないものをきちんとまとめあげるのは、つばめさんの言語化能力が高かったことで成り立ってると思いますね

つばめ
つばめ

ありがとうございます!

はせがわようすけ
はせがわようすけ

Jxckさん*2がよく「点と点をつないで線にしたら見えるものがある」みたいなかっこいいこと言ってるじゃないですか

つばめ
つばめ

かっこいいですよね、あれ

はせがわようすけ
はせがわようすけ

それがまさにこの本なのかなと思って。
CSPから始まる一連のcross-origin系のヘッダーとかって、点の話はたくさんあるじゃないですか。これを設定するとこうなります、みたいな解説とか。この本は、それが何を意味しているのか、それぞれをつなぐことで何を守ろうとしているのか、なぜそれが出てきたのかみたいなのが整理されているのは大きいですよね

にしむねあ
にしむねあ

たしかにそうですよね
この対策をしたけど、まだこういったリスクが白地として残っているから、新しいヘッダーが出たんだよっていう形で、順を追って説明されているので。

つばめ
つばめ

まさにそのへんがやりたかったんですよね

にしむねあ
にしむねあ

レビューしながら思ったのは、けっこう長い時間かけてこれを書いたんだろうなと。
その間に Web の仕様やブラウザーの実装も数週間置きにバージョンアップして、セキュリティ周りの仕様もどんどん強化されているから、書いてる中で時代が変わっちゃっているものも出てきている。
例えば、 `target=_blank`で`window.open` したら `noopener` が暗黙的に指定される時代だよ、とか。

つばめ
つばめ

ありましたね

にしむねあ
にしむねあ

林さん*3からコメントついてたのは、そろそろFlashについて書くときはブラウザーから消えてる技術だから注釈をつけてあげたほうがいいとか

つばめ
つばめ

時代ですよねほんとに

キヌガワマサト
キヌガワマサト

本が出た時はもうFlash終わってましたもんね

つばめ
つばめ

いやー、そんな日がすぐに来るとは思ってなかったですよ
本が出るときにちょうど消えたので、林さんからコメントもらってなかったら、本が出た時点で古い話になってましたよ。

キヌガワマサト
キヌガワマサト

たしかCSPのバイパスでFlashを使った攻撃みたいなの書いてあったと思うんですけど、もはやそれいらなくなっちゃったですよね

つばめ
つばめ

まさに、書いてる最中に古くなるみたいなの。
もともとあの原稿って2019年のセキュリティキャンプのために書いたのがベースになってるんですけど、そのときに書いたCookie周りの話とかって、当時からそれこそsamesiteに関しての仕様やドキュメントが増えてsamesite=laxがデフォルトになるみたいなちょうどそういう時期くらいに書いたものだったので、実際脱稿するまでにかなり大幅に書き替えたりもしてて。かなり、まさにWebだなって気がしましたね

にしむねあ
にしむねあ

プライバシー周りがいちばん動きがあるじゃないですか。
CNAMEクローキング対策とかプライバシーサンドボックスの話とか。
あそこの章はほんとに数か月単位で新しいものが書き足せるような領域で、どのタイミングで書くかほんとに難しいですよね

つばめ
つばめ

そうですよね、実際かなり迷いました。
それこそすでに書いた部分でも新しくなってるからもうちょっと書きたいっていうのが混在してしまっていて。
まあでも最終的には、今の時点のスナップショットがとれて、かつ、アカデミックな文献だったりスペックに関する議論が落ち着いてる部分に関しては、スナップショットをとることにも価値があるだろうっていう気持ちであのあたりは今の記述に留めていて。
だから、例えばプライバシーサンドボックス周りは個人的にはまだあの本に載せるべきじゃないかなとか、逆にこの領域の話は載せるべきかなとか、考えながら書いたんですよね。スナップショットとして今どこが適切か、みたいなのを。

にしむねあ
にしむねあ

第二版、第三版で加筆して、儲ける算段ができましたね

つばめ
つばめ

ちょっとラムダノートさんの宣伝になっちゃうんですけど、ラムダノートさんから出る書籍って、新しく刷り直すタイミングで内容を書き替えたりとか追記したりとかが、けっこう盛んにやられているんですよね。
変化の速いWeb周りの本を出すにはありがたい出版社さんだなぁと思って。
ラムダノートさんの宣伝になっちゃいますけど、この部分は出版社さんへの感謝を込めてちゃんと文字起こししてくださいね

はせがわようすけ
はせがわようすけ

ラムダノートさんへのリンク先のドメイン名間違るとか、そういうの気を付けますね。

つばめ
つばめ

少しずつ、これ落ち着いたなっていうところで書きたい部分もあるんですよね。Feature Policyとかも書いてないし。それ以外にも書いてないのいくつかあるし、そういうのを少しずつ盛り込んでいけたらなと思っています、これから。増刷とか改定のタイミングで。

にしむねあ
にしむねあ

いいですね。


次回に続きます!

*1:小勝純さん。MicrosoftでEdgeを始めとするブラウザーのセキュリティ研究、実装を行っている。@shhnjk

*2:Jxckさん。Web Developer。mozaic.fmblogなどを通じてWebの新しい技術に関する情報を常に発信している。

*3:林達也さん。W3CやIETFを通じてのWeb周辺技術に関する標準化活動に詳しい。@lef