書籍タイトル:体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
読む時間:16:19
はじめに
今年の四月から、お客様案件のバックエンド側を一人で担当することになりました。
これまでは、与えられた設計に従って実装する、いわゆる「プログラマー的な仕事」が中心でした。
しかし今は、自分自身でシステム全体の設計を行う必要があり、基本設計のような大きな視点から、ソースコードの細部に至るまで、全般的な責任を担う立場になっています。
その中で一番自信がないと感じているのが、「どうやって安全なシステムを構築するか」という点です。
正直、ただの実装であれば誰でもできます。特に今のAI時代では、GPTに指示すればあっという間にコードを生成してくれます。
しかし、セキュリティの観点はそう簡単には済みません。ハッカーは思いもよらない角度から攻撃を仕掛けてきますし、実装時にどんな点に気を付けるべきか、私自身まだ知識が十分ではありません。
そこで、少しでも体系的に学び直そうと思い、本書の購入に至りました。
📚 本書の詳細情報
印象に残ったポイント
1. いろんなインジェクションに気を付けて
新卒時代の研修では、おそらくどの会社でも「SQLインジェクション」について解説があったと思います。
簡単に言うと、SQL を外部のパラメータから注入する場合、意図しない値を入れられると、想定外のデータを取得されたり、場合によってはデータを削除されたりする恐れがあります。対策としては、パラメータをそのまま使わずに、サニタイズ(悪意のあるコードや特殊文字を無害化する処理)を行ってから利用する必要があります。
ただし実際には、注意すべきは SQL だけではありません。
「ファイルアップロード時」「OS コマンド入力時」「リダイレクト URL の指定時」「JSON/XML ファイルを扱う時」など、ユーザーから何かを受け取り、それをチェックせずにそのまま実行してしまうと、同様にインジェクションのリスクが発生します。
本書では、想定されるさまざまな攻撃パターンとその防御策がわかりやすく解説されており、実装の設計段階で参照する資料として非常に有用だと感じました。
各パターンの説明は丁寧で情報量も多いため、一度読んだだけではすぐに覚えきれないかもしれません。ただ、それでも「こういう攻撃があり得る」という知識を頭の片隅に置いておくだけで、設計や実装時に大きな助けになると思います。
2. CORSとCSRFに気を付けて
CORS(Cross-Origin Resource Sharing):「異なるオリジン(ドメイン・ポート・スキームが違う)」からのリソース取得を制限
CSRF(Cross-Site Request Forgery):ユーザーの 意図しないリクエストを防ぐ
この二つは名前も似ていますし、攻撃手法にも共通点があるため、セットで学ぶと理解が深まり、とても効率的です。
本書では、それぞれの攻撃の仕組みや具体的な防御方法(たとえば HTTP ヘッダーの設定など)が丁寧に解説されています。安全な Web アプリケーションを開発する上で欠かせない知識が得られる内容だと思います。
3. 認証/認可などのセキュリティ周りの設計パターン
認証・認可・アカウント管理・ログ管理といった機能は、どのシステムにも欠かせない要素です。そして、これらにはすでに成熟した設計パターンが存在しているため、ゼロから新しく考える必要はありません。
事前にこうした既存の設計パターンを知っておけば、新規システムを開発する際に、アーキテクチャの基本構成や処理フローをスムーズに設計できます。効率的に開発を進めるためにも、ぜひ学んでおくことをおすすめします。
本書では基礎的な部分に絞って解説されていますが、まずはこの知識で十分だと感じました。そのうえで、さらに興味がある方は認証・認可関連の専門書に進むと、より理解が深まると思います。
まとめ・感想
本書は、今年の読書リストの中でも、一番難しく、かつ一番勉強になるテキストです。
エンジニア初心者の方には少し難しいかもしれません。最低でも、バックエンドとフロントエンド間の基礎的なやり取りや、HTTP の基本知識を身につけてから読むことをおすすめします。
また、本書は PHP ベースで解説されていますが、JavaScript や Java などオブジェクト指向の知識があれば、ソースコードもなんとなく理解できると思います。
本書を読んでの率直な感想は、「ハッカーって怖いな」ということと、「セキュリティ周りには絶対気を付けなければいけない」ということです。
すぐに全てを完璧に実装できるわけではありませんが、設計段階で少しずつ意識していき、必要に応じてお客様にトレードオフを説明できるようになれればいいなあ、と思いました。