api-security-hardening について
REST API を保護する開発者向けのセキュリティ強化スキルです。一般的な脆弱性への対策として、ミドルウェア、入力検証、セキュリティヘッダー、チェックリストを解説します。
主な機能
- 01Express セキュリティミドルウェア
- 02入力検証とサニタイズ
- 03セキュリティヘッダー設定
- 04API セキュリティチェックリスト
- 05Python と Nginx のガイダンス
活用シーン
- 01Express REST API の強化
- 02ユーザー入力の検証
- 03クロスオリジンアクセスの制限
- 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 を使用する
- 利便性のためにセキュリティを無効化する
コメント
Markdown 対応