Web 開発者として仕事をしていく中で、意外にセキュリティ周りの知識が不足していたり、要件やスケジュールの都合でセキュリティへのケアを最優先して取り組むことが難しいと思うような場合があります。
特に最近は各種 Web フレームワークやクラウド開発が多くなってきており、気がつかないままカバーされている領域も多いため、一度基本から知識を整理したいと思い、2018年6月に第2版が発売された『体系的に学ぶ 安全なWebアプリケーションの作り方』を購入して読むことにしました。
目次
1)Webアプリケーションの脆弱性とは
2)実習環境のセットアップ
3)Webセキュリティの基礎 ~HTTP、セッション管理、同一オリジンポリシー、CORS
- HTTP通信の仕組み
- ステートレスな HTTP 認証
- クッキー、セッション管理、同一オリジンポリシー、CORS 等の知識
4)Webアプリケーションの機能別に見るセキュリティバグ
- 機能別に発生しやすい脆弱性のパターンと対応方法
- XSS(基礎・発展編)
- エラーメッセージの情報漏えい
- SQLインジェクション
- CSRF
- クリックジャッキング
- オープンリダイレクト
- メール送信、ファイルアクセス、JavaScript、WebAPIの問題など
5)代表的なセキュリティ機能
6)文字コードとセキュリティ
7)脆弱性診断入門
8)Webサイトの安全性を高めるために
- アプリ以外の側面でも考慮すべきセキュリティ施策
9)安全なWebアプリケーションのための開発マネジメント
全体的にかなり量が多いので一度で読み切るのは大変ですが、簡単に読むならば、まずは 「1章:Webアプリケーションの脆弱性とは」と「3章:Webセキュリティの基礎 ~HTTP、セッション管理、同一オリジンポリシー、CORS」の内容を熟読した上で、実際に開発を進めながら 4章以降を読んでいく流れが良さそうです。
また「4章:Webアプリケーションの機能別に見るセキュリティバグ」においては、提供されているサンプルを利用するか、自分で擬似的に環境を作って実際に脆弱性を経験してみることをおすすめします。色んな脆弱性が網羅されているので、一通り内容を押さえておくと、実際に現場で役に立つ知識として活かせると思います。
Webアプリケーションの脆弱性とは
まず「1章:Webアプリケーションの脆弱性とは」を読むことで、脆弱性の定義、原因、分類、影響について概要的に理解することができます。アプリの安全性を確保する要素を大きくセキュリティバグ(脆弱性)とセキュリティ機能に分類し、それぞれに対するアプローチについて説明されています。
HTTP通信の基本的な仕組みを学習する
「3章:Webセキュリティの基礎 」では、基礎から HTTP の仕組みを理解することができます。クライアントとサーバー間の通信が対話形式で記述されていることもあり、非常に分かりやすいです。
様々なセキュリティバグ(脆弱性)パターンと対応方法を学習する
PHP 及び JavaScript で書かれたサンプルコードを用いて色んな攻撃の手法が紹介されており、具体的な対応方法を知ることができます。
代表的な Web アプリケーションの脆弱性としてよく知られている XSS(クロスサイト・スクリプティング)については、基礎編と発展編で別れて紹介されています。他にも SQL インジェクション、CSRF、オープンリダイレクト等、実際に脆弱性診断の結果レポートによく出てくるような内容が網羅されているので、個人的には一番興味深く読めた章でした。
セキュリティ機能を学習する
パスワードの保存方法とハッシュの仕組みについて改めて体系的に知識をインプットできたり、ログイン画面やパスワードリセット機能の実装に必要なノウハウを知ることができます。
最近はサードパーティの認証・認可サービスにお任せするケースも多いと思いますが、多種多様な要件に応えたりトラブルシューティングできるようにするためには、この章で紹介されているセキュリティ機能の仕組みについてちゃんと理解しておく必要がありそうです。
その他、アプリ以外の側面でも考慮すべきセキュリティ施策
- サーバーの運用
- ネットワーク経路
- フィッシング
- TLS の中間者攻撃
- マルウェア対策
など、幅広い領域において必要となるセキュリティ施策について学習できます。技術的な部分のみならず、Web アプリをめぐる各関係者が持つ責任と範囲の考え方についても触れられており、とても参考になります。
まとめ
- Web アプリケーションを開発する上で必要となるセキュリティの基礎知識が学べる
- 様々な脆弱性が網羅的に紹介されており、脆弱性だけでなくセキュリティ機能・サーバー運用に至るまで一気通貫して学習できる
- 量が多いので一度にすべて読み込むのは大変だが、4章は時間をかけてでも一通り読んでおくと良い
いかがだったでしょうか。
冒頭にも書きましたが、最近は多くの Web アプリが開発フレームワークやクラウドサービスに依存するようになり、知らないうちに色々カバーされていることが多いので、個人的にはそういうのが当たり前のような感覚になっていることもありました。今回の記事をきっかけに改めて基礎から体系的に学習できたので、日頃の仕事にも活かしていきたいと思います。
最後まで読んでいただきありがとうございました。