基本のセキュリティ意識
どのエンジニアも守るべき、譲れない 5 つのルール
⏱ 想定 ~5 分
01 · 読む
セキュリティの専門家になる必要はありません。でも、 大半の セキュリティ事故を生むミスは必ず避けるべきです。
現実は、ほとんどのセキュリティ事故は高度なハッキングで起きるのではなく、エンジニアが基本を忘れることで起きます:パスワードをソースに残す、ユーザー入力を検証しない、 HTTPS のはずが HTTP のエンドポイント。
この 5 つのルールを守れば、無事に過ごせます。任意ではありません —— 他人から信頼されるコードを書くための最低基準です。
02 · 読む
この 5 つを覚えてください。ジュニアエンジニアがやらかすセキュリティのミスのほとんどをカバーします。
ポイントまとめ
- シークレットをコミットしない: API キー、パスワード、トークン → .env + .gitignore
- ユーザー入力を信用しない:フォームや URL から来るものは使う前にサニタイズ
- 常に HTTPS :本物の用途で HTTP は使わない —— 通信は暗号化する
- 依存パッケージを更新し続ける:既知の脆弱性は npm audit を定期的に実行
- 機微情報をログに出さない: console.log(password) や本番でトークンを出力しない
03 · 読む
リリース直前にレビューする app を受け取りました。 cat と grep でいくつのセキュリティ違反が見つかるか、やってみましょう。
04 · ターミナル演習
まずソース全体を読みます。学んだばかりの 5 つのルールに違反するものを探してください。
(このセクションはインタラクティブです — JavaScript を有効にしてください。)
05 · ターミナル演習
次は grep でセキュリティ違反になりそうなものをまとめて探します —— パスワード、シークレット、キーのような語を含むもの。
(このセクションはインタラクティブです — JavaScript を有効にしてください。)
06 · コード例
修正版はこんな見た目になります。あなたが見た問題と見比べてください —— すべて対処済みです。
app.js —— セキュリティ問題を修正
require('dotenv').config();
const express = require('express');
const app = express();
// Secrets from .env, not hardcoded
const API_SECRET = process.env.API_SECRET;
app.post('/login', (req, res) => {
// POST body, not URL query string
const { username, password } = req.body;
console.log('Login attempt:', username);
// No password logged! Compare with hashed version in DB
});
app.listen(process.env.PORT || 3000, () => {
console.log('Server running');
// No secrets logged!
});
修正点: ( 1 ) シークレットを dotenv 経由で .env に移動、 ( 2 ) ログインは GET ( URL )ではなく POST ( body )、 ( 3 ) ユーザー名だけログ —— パスワードは絶対に出さない、 ( 4 ) ハードコードのパスワード比較を廃止 —— 正しい認証システムでハッシュ化したパスワードを使う、 ( 5 ) 起動ログでシークレットを漏らさない。
07 · クイズ
次のうち git に 絶対に コミットすべきでないものは?
- package.json
- API キー入りの .env
- index.html
- README.md
08 · 空欄補充
プロジェクトの依存パッケージの既知の脆弱性をチェックするには、 npm _____ を実行します。
⚠ 全機能のインタラクティブ体験には JavaScript が必要です。JavaScript を有効にして再読み込みしてください。
※ このサイトは独立した教育プロジェクトで、Anthropic の公式製品ではありません。Claude™ は Anthropic, PBC の商標です。