Webアプリケーションのセキュリティ対策は、「難しそう」「後回しにしがち」と感じる方も多い分野です。
私自身、今日の学習(#39)で helmet() はデフォルトで HSTS を有効にする という点を改めて理解し、「強いセキュリティ設定は本番限定が基本」という重要な考え方を学びました。
この2点は、知らずに使うと開発時に困る原因にもなります。そこで今回は、学びメモを整理し、なぜ注意が必要なのかを記事としてまとめます。
helmet() と HSTS は何をしているのか
まず helmet() とは、Node.js(Express)で使われるセキュリティ用ミドルウェアです。
代表的な役割は、ブラウザに「このサイトは安全だよ」というルールをHTTPヘッダで伝えることです。
その中の1つが HSTS(HTTP Strict Transport Security) です。
HSTSを中学生向けに例えると
HSTSは、次のようなルールです。
「この家に来るときは、必ず“鍵付きの道(HTTPS)”を通りなさい。近道(HTTP)は今後一切使ってはいけません。」
helmet() を使うと、特に設定しなくても HSTS が有効になる場合があります。
これは本番環境では非常に心強い一方で、開発環境では注意が必要です。
なぜ「強いセキュリティ設定は本番限定」なのか
結論から言うと、開発環境と本番環境では目的が違うからです。
開発環境の目的
-
すばやく動作確認したい
-
localhost や http:// で気軽に試したい
本番環境の目的
-
利用者の通信を守る
-
中間者攻撃などを防ぐ
HSTS が有効な状態で localhost にアクセスすると、
-
「HTTP ではアクセスできない」
-
「証明書エラーが消えない」
といった問題が起きがちです。
これは、HSTS がブラウザに記憶されるという性質があるためです。
HSTSは「一度決めた校則を、ずっと守らされる」ようなものです。
本番という“正式な学校”では必要ですが、練習用の“仮校舎(開発環境)”では厳しすぎる場合があります。
そのため、強いセキュリティ設定は本番限定で有効にするのが基本方針になります。
まとめ:今日の学び
今回の学びを簡潔にまとめます。
-
helmet() は デフォルトで HSTS を有効にする
-
HSTS は HTTPS 強制の強力な仕組み
-
開発環境ではトラブルの原因になりやすい
-
強いセキュリティ設定は本番限定で使うのが基本
「便利なライブラリほど、裏で何をしているかを知ることが大切だ」と改めて感じた学習でした。
参考情報
-
Helmet 公式ドキュメント
https://helmetjs.github.io/ -
MDN Web Docs: HTTP Strict Transport Security (HSTS)
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Strict-Transport-Security
