はじめにlink
2023/02/13に発売された「フロントエンド開発のためのセキュリティ入門」を読みました。
自著の実践Node.js入門と発売日が近かった事もあり、Node学園41時限目で著者のshisamaさんとLTをさせていただきました。
https://nodejs.connpass.com/event/275061/
本とイベントの内容を忘れないうちに記事にしておこうと思います。
「フロントエンド開発のためのセキュリティ入門」についてlink
この書籍はフロントエンドエンジニアがおさえておくべきセキュリティ対策について解説されています。
セキュリティの良著といえば特丸本が思い浮かびます。 解説も再現方法も重厚で日本語で読める書籍で一度は読んでおいたほうがよい本ではありますが、はじめてセキュリティについて触れようと思うフロントエンドエンジニアにとっては少しひるんでしまう面もあると思います。
「フロントエンド開発のためのセキュリティ入門」はもう少しフロントエンドよりの視点から執筆されていて、はじめてこういったジャンルに触れるフロントエンドエンジニアにとっては中間を埋めるのによいステップであると感じました。
かといってセキュリティの記述についておろそかになっている箇所があるわけではありません。
調べるフックとなる単語には触れられていますし、参考となる書籍やリンクが明記されているため内容を深堀していくのに不自由はしないでしょう。
また、監修として関わられているはせがわようすけさんは日本の中でもトップクラスのセキュリティに強い方なので、解説内容においても不安感がありません。
内容についてlink
3章から具体的な対策についての記述がはじまります。
かならずJavaScriptをベースにしたハンズオン形式のコードが付属していて実際に挙動を確かめながら進められます。 著者のshisamaさんはNode.jsのコミッターでもあるのでNode.jsの使い方やコードの品質についても信頼できます。
コードは全体的にCJSで説明されていました。これは自著でも悩んだ所だったのですが、今このタイミングがかなり過渡期なのでESMだけで説明はできるが、逆にCJSに不十分さがでる可能性があって悩ましいよなぁと思いました。
余談
: 実際、Node学園で具体的にESMだとなにが問題になりますか?というお話をしましたが「Node.js単体ではいける感触があるが、TypeScriptやバンドラーなどが関わると躓くことが多い」と思っています。
シンプルな構成ならいけそうだけど、フロントエンドなどのビルドエコシステムが組み合わさるとCJSとESMどちらかに寄せきるのが難しくなってくるな、というのが現状の認識です。
実務でフロントエンドのコードを書いた事がある人であれば3章くらいまではうっすらと理解できている事が多いのかなと思います。 4章以降は知ってはいるが、説明はむずかしいという内容が多く集中して読む箇所が増えました。
数年前に話題になったサイドチャネル攻撃を防ぐ方法についても記載されていて、色々と頑張るとプロセスを分離してSharedArrayBufferが使えるようになるよという解説があります。 しかし、これ頑張ってもSharedArrayBufferが使えるようになるだけならコスパ悪いよね、というのはNode学園でも笑い話としてあがっていました。 正直自分もSharedArrayBufferをアプリケーションで絶対に使いたいパターンがないので頑張る労力に見合わないなぁという感想です。
XSSの対策についてはDOMPurifyとSanitizer APIについて触れられていました。
自分もDOMPurifyを主に使う事が多く、ブラウザの標準としてSanitizer APIがあるなら移行できないかと検討した事がありますがうまく使えなかった経緯があり、実際のアプリケーションを構築する面を考慮してDOMPurifyをメインに触れたのかなと思いました。
本書の内容で特に自分が面白かった点は、CSRFの対策はTokenをつけるとうっすらとした認識しかなかったが、それ以外にも複数対策はあるしむしろTokenは古い方法なのだという所でした。
expressが提供していた csurf モジュールがDeprecatedにされていて調度気になっていた所でしたが、SPAにはいらないと言われていたのは知っていましたがやっと内容として納得できました。
余談
: csurf はarchiveされているが、どういう実装になっているのか確認しにいったらコードごと削除されていてダイナミックさに驚いた。
さっそく本書の内容を使って自分が開発しているシステムを最新の対策で書き直しできました。
なにより、一番よかったのは「パスワードマネージャーのためにもパスワードのコピペを禁止しないことが大切」という内容をセキュリティ本が書いてくれている所です。世の中にはまだこういうUIを提供するシステムも多いので、セキュリティ入門の側から発信される事は意義は大きいと思います。
おわりにlink
セキュリティの入門書として、フロントエンド周辺の知識が多い自分にはかなりとっつきやすくすらすらと読める良著でした。
自著で書ききれないなと思った部分もかなり補完されていたので、自著を買っていただいた人にもノータイムでおすすめできる本です。