Secure Steady
セキュアコーディング - セキュアコーディングの基本 の使い方・オプション・サンプル

セキュアコーディング - セキュアコーディングの基本

安全なコードを書くための基本原則。入力検証・最小権限・エラーハンドリングの3原則で大半の脆弱性を防止できる。

概念図

セキュアコーディングの基本 diagram

実例

入力検証の実装例

bash
// 入力検証(ホワイトリスト方式)
const ALLOWED = /^[a-zA-Z0-9_]{1,30}$/;
if (!ALLOWED.test(username)) {
  throw new ValidationError("Invalid username");
}

エラーハンドリングの実装例

bash
// エラーハンドリング
try {
  await processRequest(req);
} catch (err) {
  logger.error("Request failed", { requestId, error: err });
  res.status(500).json({ error: "Internal error" });
  // スタックトレースはユーザーに返さない
}

セキュアコーディング 3 原則

入力検証 最小権限 エラーハンドリング
概要 すべての外部入力を信頼しない。型・長さ・形式・範囲を検証する コードやプロセスの権限を必要最小限に留める エラー情報の露出を防ぎ、監査ログを適切に記録する
手法 ホワイトリスト方式(許可パターンを定義)、出力先に応じたエスケープ DB ユーザーの読取専用化、ファイルアクセス制限、API スコープ最小化 スタックトレース非公開、認証の成功/失敗をログ記録、機密情報をログに含めない
防げる攻撃 XSS、SQL インジェクション、コマンドインジェクション 権限昇格、横展開、大規模データ漏洩 情報漏洩(エラーメッセージ経由)、インシデント見逃し
ポイント 入力検証と出力エスケープの 2 つで大半の脆弱性を防止できる 万が一突破されても被害範囲を限定できる ユーザーには最小限の情報、内部には十分なログを残す

関連トピック