mcpField
A
api-security-hardening

api-security-hardening

github.com/secondskyセキュリティ240496 回インストール5 週間前に更新
リポジトリ

api-security-hardening について

REST API を保護する開発者向けのセキュリティ強化スキルです。一般的な脆弱性への対策として、ミドルウェア、入力検証、セキュリティヘッダー、チェックリストを解説します。

主な機能

  1. 01Express セキュリティミドルウェア
  2. 02入力検証とサニタイズ
  3. 03セキュリティヘッダー設定
  4. 04API セキュリティチェックリスト
  5. 05Python と Nginx のガイダンス

活用シーン

  1. 01Express REST API の強化
  2. 02ユーザー入力の検証
  3. 03クロスオリジンアクセスの制限
  4. 04API セキュリティ対策の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill api-security-hardening

インストール後、Claude Code で/api-security-hardeningを入力して読み込まれたか確認します。

同梱ファイルreferences/python-nginx.md

詳細

API セキュリティの強化

複数のセキュリティレイヤーで、REST API を一般的な脆弱性から保護します。

セキュリティミドルウェアスタック(Express)

const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const mongoSanitize = require('express-mongo-sanitize');

app.use(helmet());
app.use(mongoSanitize());
// For input sanitization, see the `xss-prevention` skill — do NOT use the
// deprecated `xss-clean` package (unmaintained since 2018; its own README
// recommends migrating off it).

app.use('/api/', rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 100
}));

app.use('/api/auth/', rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 5
}));

入力検証

const { body, validationResult } = require('express-validator');
const escapeHtml = require('escape-html');

app.post('/users',
  body('email').isEmail().normalizeEmail(),
  body('password').isLength({ min: 8 }).matches(/[A-Z]/).matches(/[0-9]/),
  // express-validator v7+ removed the built-in .escape() sanitizer; use a
  // customSanitizer backed by `escape-html` to HTML-escape the value.
  body('name').trim().isLength({ max: 100 }).customSanitizer(v => escapeHtml(v)),
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    // Process request
  }
);

セキュリティヘッダー

app.use((req, res, next) => {
  res.setHeader('Content-Security-Policy', "default-src 'self'");
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('X-Content-Type-Options', 'nosniff');
  res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
  res.setHeader('X-XSS-Protection', '1; mode=block');
  next();
});

セキュリティチェックリスト

  • すべての通信で HTTPS を使用
  • 保護対象のすべてのルートで認証を実施
  • 入力の検証とサニタイズを実施
  • レート制限を有効化
  • セキュリティヘッダーを設定
  • CORS を許可されたオリジンに制限
  • 本番環境のエラーにスタックトレースを含めない
  • 監査ログを有効化
  • 依存関係を定期的に更新

追加の実装

以下を参照してください:references/python-nginx.md:

  • Python FastAPI のセキュリティミドルウェア
  • パスワードルールを含む Pydantic による入力検証
  • Nginx の SSL/TLS およびセキュリティヘッダーの設定
  • HTTP パラメータ汚染の防止

絶対に行わないこと

  • 検証せずにユーザー入力を信頼する
  • 本番環境で詳細なエラーを返す
  • コード内にシークレットを保存する
  • 状態を変更する操作に GET を使用する
  • 利便性のためにセキュリティを無効化する

コメント