2月13日に『フロントエンド開発のためのセキュリティ入門』というタイトルの本を出版します。
今回は本の内容の簡単な紹介をします。また、今回はじめて本を執筆させていただいたので、熱が冷めないうちに本を書くということについて書き残しておこうと思います。
本の内容について
タイトルの通り、フロントエンドエンジニアに向けて書いたセキュリティの入門書です。
筆者はセキュリティの専門家ではありませんが、フロントエンドエンジニアとして働いています。
筆者はフロントエンドエンジニアとしてセキュリティを自ら学びましたが、セキュリティの学習の難しさを常に感じていました。
そういった同じく難しさを感じているフロントエンドエンジニアにとってセキュリティの学習の最初の一歩となる本を目指して書きました。
想定読者
メインターゲットとなる読者は次のとおりです。
- 業務経験1〜3年目のフロントエンドエンジニア
- Webセキュリティを学び始めたいWebエンジニア
- Webアプリケーションの具体的なセキュリティ対策を手を動かしながら学びたい人
目次
第1章 Webセキュリティ概要
- 1.1 なぜセキュリティ対策を行うのか
- 1.2 Webの脆弱性の種類と傾向
第2章 ハンズオンの準備
- 2.1 準備をはじめる前に
- 2.2 Node.jsの設定
- 2.3 Node.js + Expressを使ったHTTPサーバの構築
第3章 HTTP
- 3.1 HTTP基礎
- 3.2 HTTPのハンズオン
- 3.3 安全な通信のためのHTTPS
第4章 オリジンによるWebアプリケーション間のアクセス制限
- 4.1 アプリケーション間でのアクセス制限の必要性
- 4.2 同一オリジンポリシー(Same-Origin Policy)による保護
- 4.3 同一オリジンポリシーによる制限のハンズオン
- 4.4 CORS(Cross-Origin Resource Sharing)
- 4.5 CORS ハンズオン
- 4.6 postMessageを使ったiframeをまたいだデータの送信
- 4.7 プロセス分離によるサイドチャネル攻撃の対策
第5章 XSS
第6章 その他の受動的攻撃(CSRF、クリックジャッキング、オープンリダイレクト)
- 6.1 CSRF
- 6.2 CSRF対策のハンズオン
- 6.3 クリックジャッキング
- 6.4 クリックジャッキング対策のハンズオン
- 6.5 オープンリダイレクト
- 6.6 オープンリダイレクト対策のハンズオン
第7章 認証・認可
- 7.1 認証と認可の違い
- 7.2 認証機能のセキュリティリスク
- 7.3 アカウント作成フォーム実装ハンズオン
- 7.4 ログイン情報の漏えいに注意する
第8章 ライブラリを狙ったセキュリティリスク
- 8.1 ライブラリの利用
- 8.2 ライブラリに潜むセキュリティリスク
- 8.3 ライブラリ利用のセキュリティ対策
Appendix 本編では扱わなかったトピックの学習
- A.1 さらにセキュリティを学ぶには
- A.2 HTTPSハンズオン
ハンズオンについて
3章から7章まではコードを書きながら学べるハンズオンを掲載しています。
3章と4章では、HTTPやCORSについてコードを書きながらそれぞれの動作を学ぶハンズオンを掲載しています。
5章と6章では、「XSS」「CSRF」「クリックジャッキング」「オープンリダイレクト」の攻撃が成立するコードを書いてみて仕組みを学びます。そのあと、攻撃の対策コードを書きながら脆弱性対策について学ぶハンズオンを掲載しています。
7章では、アカウント作成画面を作りながら、ユーザーに複雑なパスワードを設定させるためのパスワード入力フォームについて学びます。ユーザーが複雑なパスワードを設定させるのに面倒を感じにくいフォームの実装について学ぶハンズオンになっています。
脆弱性対策のための実装の多くはフロントエンドのHTMLやJavaScriptに寄せていますが、必要に応じてサーバサイドのコードも書いていただきます。
また、Appendixには「HTTPS化」をローカル環境でやってみようというハンズオンも掲載しています。なぜ本編ではなく付録に掲載したかと言いますと、HTTPS化はアプリケーションレイヤーのセキュリティではないと考えているためです。 また、HTTPS化は証明書の作成や登録といったものが必要になり、初学者には敷居が高いかもしれないと感じたためです。 想定読者の多くはフロントエンドエンジニアですので、アプリケーションレイヤーの脆弱性対策以外のところで躓いて本を読み進めるのは避けたいと感じたからです。 もちろん、実際のWebアプリケーション開発ではHTTPS化は必須です。
ハンズオンのサンプルコードも用意しています。もしハンズオンで行き詰まったら参考にしてください。
https://www.shoeisha.co.jp/book/download/9784798169477
各章の簡単な紹介
1章
そもそも「脆弱性」とは何かとか、なぜセキュリティは大切なのか、といった導入の章になります。
想定読者がフロントエンドエンジニア1〜3年目ということもあり、HTMLやCSS、JavaScriptを使って機能要件を満たすアプリケーションを開発できるようになったけど、非機能要件までは知識がまだなかったり実装できなかったりする読者も多いと考えています。そのため、非機能要件というものが何かも説明しています。
また、どういったセキュリティ対策が必要なのか種類や動向についても説明しています。
2章
前述のとおり、3章〜7章にハンズオンを掲載しています。2章はハンズオンのための環境構築を説明しています。
本書のハンズオンはフロントエンドエンジニアに馴染みのある技術を採用するためにNode.jsとJavaScriptを使ったハンズオンを掲載しています。
Node.jsを使ってHTMLやCSS、JavaScriptの配信やルーティングの処理を行います。
3章
HTTPについて基本的な知識を掲載しています。
HTTPについて把握していないとそのあとの章の説明を理解できないため、リクエストやレスポンス、HTTPメソッドやHTTPヘッダ、Cookieなど基本的な知識を簡単に説明しています。
4章
Same Origin PolicyやCORSなどを説明しています。
外部のWebサイトから自分たちのWebサイトを守るため、ブラウザに設けられているOriginというセキュリティ境界について説明しています。
また、簡単にではありますが、ここ数年で大きな問題であったサイドチャネル攻撃の対策となるSite Isolationなども後半に説明しています。
5章
XSSについて仕組みと対策を説明しています。
フロントエンドのJavaScriptの脆弱性を悪用されるXSSは、この本の中でも重要な章となります。そのため、ページ数は他の章より多めに割いています。
前半はXSSの仕組みと基本的な対策を説明しています。後半はContent Security Poicyの仕組みと使い方について説明しています。
6章
XSS以外の代表的な受動型攻撃である、CSRFとクリックジャッキングとオープンリダイレクトについて仕組みと対策を説明しています。
7章
認証と認可の違いや認証の種類などについて説明しています。
また、前述したハンズオンがこの章のメインとなっています。
8章
脆弱なライブラリの使用を避けるためにできることを説明しています。
Appendix
付録として、この本のあとにどうセキュリティを学べばいいのかを紹介しています。筆者がセキュリティを学ぶのに役立った本やWebサイトを紹介しています。
また、前述のとおり、HTTPS化のハンズオンも掲載しています。
書籍内の誤りについて
誤りを出版直前で見つけてしまいました。そのため、第1刷には修正が間に合いませんでした。この場を借りてお詫び申し上げます。
正誤表を出版社のWebサイトに掲載しているので、内容についてはそちらをご確認ください。
https://www.shoeisha.co.jp/book/detail/9784798169477
まだ掲載していないものもあるので、追って追加していきます。
また、これらの誤りについては2刷以降に反映される予定です。
正誤表に記載のない誤りを見つけた場合は、問い合わせフォームから連絡いただくかTwitterなどで教えていただけると嬉しいです。
Amazonのレビューなどに書いてもあまり見ないと思うので、上記に書いたとおり翔泳社か私までお伝え下さい。
本を書いた経験について
本を書くというのは多くの時間と労力を消費します。実際、本を書き終えるのに2年以上かかっています。
本を書いたら偉いのかというと、そうではありませんが本を書ききるということは、予想していたよりも大変なことでした。
筆者は社会人学生でもあるため、なかなか執筆時間を捻出するのは難しかったです。
ただ、本の執筆を通じて多くのことを学びました。
自分の知識の整理をする良い機会になりました。また、文章を書くことについても勉強する良い機会になりました。
これまで読んだ本を読み直したり、新しい本を読んだり、仕様を読み直したりしました。
もっとも勉強になったのは筆者自身かもしれません。
本を書きたいと考えている人や書く機会がある人は一度体験してみる価値はあると思います。なかなか得られない経験ですし、勉強になることは多いです。
また、監修をしてくださったはせがわようすけさんと後藤つぐみさんからは本当に多くのことを学びました。
お二人が監修者で本当によかったです。僕の文章能力や知識の浅さをカバーするのに多くの時間と労力を割いていただきました。
細かいところまで見ていただきありがとうございました。
その他にも、いろいろな人に支えられてこの本はできました。
一部の章のレビューをしていただいたJxckさん、
想定読者としてレビューしていただいた西川大貴さんとアルベスユウジさん、
本の執筆前に相談にのっていただいたじまぐさんと長友比登美さんにも感謝しております。
また、翔泳社の大嶋航平さんには、企画から刊行まで長い間さまざまな場面で助けていただきました。スケジュールが遅れることも多くご迷惑ばかりおかけしましたが、筆者に寄り添っていただき安心して執筆作業ができました。 本当に良い編集の方にお会いできて幸運だったと感じています。
妻と娘は執筆を応援してくれたり、執筆の時間を作ってくれたり、と積極的に強力してくれました。
あらためて、ありがとうございました。
最後に
この本が読者のセキュリティへの関心を高めることを願っています。
この本は初学者向けの本のため、説明を省略している部分も多くあります。
この本でセキュリティって面白いと思っていただいた方は、ぜひ今後もセキュリティへの関心を失わないようにしてほしいなというのが筆者の最大の願いです。
もし、この本が面白いと思っていただいたり、ここが間違っているとかよくわからなかったところがあったりすれば、SNSやブログ等で発信をしていただけると嬉しいです。 筆者にこっそり教えてくれるのも大歓迎です。
みなさんに楽しく読んでいただけることを願っています。
最後までお読みいただきありがとうございました。