Agent Skills by ALSEL
Anthropic Claudeセキュリティ⭐ リポ 8,981品質スコア 100/100

secure-code-guardian

認証・認可の実装、ユーザー入力の保護、OWASP Top 10の脆弱性対策が必要な場合に使用します。bcrypt/argon2によるパスワードハッシング、パラメータ化ステートメントによるSQLインジェクション対策、CORS/CSPヘッダーの設定、Zodによる入力検証、JWTトークンの構築などのカスタムセキュリティ実装に対応します。認証、認可、入力検証、暗号化、OWASP Top 10対策、セッション管理、セキュリティ強化全般で活用できます。ただし、構築済みのOAuth/SSO統合や単独のセキュリティ監査が必要な場合は、より特化したスキルの検討をお勧めします。

description の原文を見る

Use when implementing authentication/authorization, securing user input, or preventing OWASP Top 10 vulnerabilities — including custom security implementations such as hashing passwords with bcrypt/argon2, sanitizing SQL queries with parameterized statements, configuring CORS/CSP headers, validating input with Zod, and setting up JWT tokens. Invoke for authentication, authorization, input validation, encryption, OWASP Top 10 prevention, secure session management, and security hardening. For pre-built OAuth/SSO integrations or standalone security audits, consider a more specialized skill.

SKILL.md 本文

セキュアコードガーディアン

コアワークフロー

  1. 脅威モデル化 — 攻撃面と脅威を特定する
  2. 設計 — セキュリティ制御を計画する
  3. 実装 — 多層防御によるセキュアコードを記述する(以下のコード例を参照)
  4. 検証 — 明確なチェックポイントでセキュリティ制御をテストする(以下を参照)
  5. ドキュメント化 — セキュリティ上の決定を記録する

検証チェックポイント

各実装ステップの後、以下を確認します:

  • 認証: ブルートフォース保護(ロックアウト/レート制限のトリガー)、セッション固定化耐性、トークン有効期限、および無効な認証情報エラーメッセージをテストします(ユーザーの存在を漏らしてはいけません)。
  • 認可: 水平および垂直特権昇格パスがブロックされていることを確認します。異なるロール/ユーザーに属するトークンでテストします。
  • 入力処理: SQLインジェクションペイロード(' OR 1=1--)が拒否されることを確認します。XSSペイロード(<script>alert(1)</script>)がエスケープまたは拒否されることを確認します。
  • ヘッダー/CORS: セキュリティスキャナー(例:curl -I、Mozilla Observatory)でセキュリティヘッダーが存在し、CORS オリジンアロウリストが正しいことを検証します。

リファレンスガイド

コンテキストに基づいて詳細なガイダンスを読み込みます:

トピックリファレンス読み込むタイミング
OWASPreferences/owasp-prevention.mdOWASP Top 10 パターン
認証references/authentication.mdパスワードハッシング、JWT
入力検証references/input-validation.mdZod、SQLインジェクション
XSS/CSRFreferences/xss-csrf.mdXSS防止、CSRF
ヘッダーreferences/security-headers.mdHelmet、レート制限

制約

必ず実施すること

  • bcrypt/argon2 でパスワードをハッシュ化する(MD5/SHA-1/ソルト無しハッシュは絶対に使用しない)
  • パラメータ化クエリを使用する(文字列補間SQLは絶対に使用しない)
  • すべてのユーザー入力を使用前に検証・サニタイズする
  • 認証エンドポイントにレート制限を実装する
  • セキュリティヘッダーを設定する(CSP、HSTS、X-Frame-Options)
  • セキュリティイベントをログに記録する(認証失敗、特権昇格の試み)
  • シークレットを環境変数またはシークレット管理ツールに保存する(ソースコードに記述しない)

絶対にしてはいけないこと

  • パスワードを平文またはリバーシブル暗号化形式で保存する
  • ユーザー入力を検証なく信頼する
  • ログまたはエラーレスポンスに機密データを公開する
  • 弱い、または廃止予定のアルゴリズムを使用する(MD5、SHA-1、DES、ECBモード)
  • シークレットまたは認証情報をコードにハードコードする

コード例

パスワードハッシング(bcrypt)

import bcrypt from 'bcrypt';

const SALT_ROUNDS = 12; // minimum 10; 12 balances security and performance

export async function hashPassword(plaintext: string): Promise<string> {
  return bcrypt.hash(plaintext, SALT_ROUNDS);
}

export async function verifyPassword(plaintext: string, hash: string): Promise<boolean> {
  return bcrypt.compare(plaintext, hash);
}

パラメータ化SQLクエリ(Node.js / pg)

// NEVER: `SELECT * FROM users WHERE email = '${email}'`
// ALWAYS: use positional parameters
import { Pool } from 'pg';
const pool = new Pool();

export async function getUserByEmail(email: string) {
  const { rows } = await pool.query(
    'SELECT id, email, role FROM users WHERE email = $1',
    [email]  // value passed separately — never interpolated
  );
  return rows[0] ?? null;
}

Zodによる入力検証

import { z } from 'zod';

const LoginSchema = z.object({
  email: z.string().email().max(254),
  password: z.string().min(8).max(128),
});

export function validateLoginInput(raw: unknown) {
  const result = LoginSchema.safeParse(raw);
  if (!result.success) {
    // Return generic error — never echo raw input back
    throw new Error('Invalid credentials format');
  }
  return result.data;
}

JWT検証

import jwt from 'jsonwebtoken';

const JWT_SECRET = process.env.JWT_SECRET!; // never hardcode

export function verifyToken(token: string): jwt.JwtPayload {
  // Throws if expired, tampered, or wrong algorithm
  const payload = jwt.verify(token, JWT_SECRET, {
    algorithms: ['HS256'],   // explicitly allowlist algorithm
    issuer: 'your-app',
    audience: 'your-app',
  });
  if (typeof payload === 'string') throw new Error('Invalid token payload');
  return payload;
}

エンドポイントの保護 — 完全なフロー

import express from 'express';
import rateLimit from 'express-rate-limit';
import helmet from 'helmet';

const app = express();
app.use(helmet()); // sets CSP, HSTS, X-Frame-Options, etc.
app.use(express.json({ limit: '10kb' })); // limit payload size

const authLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 10,                   // 10 attempts per window per IP
  standardHeaders: true,
  legacyHeaders: false,
});

app.post('/api/login', authLimiter, async (req, res) => {
  // 1. Validate input
  const { email, password } = validateLoginInput(req.body);

  // 2. Authenticate — parameterized query, constant-time compare
  const user = await getUserByEmail(email);
  if (!user || !(await verifyPassword(password, user.passwordHash))) {
    // Generic message — do not reveal whether email exists
    return res.status(401).json({ error: 'Invalid credentials' });
  }

  // 3. Authorize — issue scoped, short-lived token
  const token = jwt.sign(
    { sub: user.id, role: user.role },
    JWT_SECRET,
    { algorithm: 'HS256', expiresIn: '15m', issuer: 'your-app', audience: 'your-app' }
  );

  // 4. Secure response — token in httpOnly cookie, not body
  res.cookie('token', token, { httpOnly: true, secure: true, sameSite: 'strict' });
  return res.json({ message: 'Authenticated' });
});

出力テンプレート

セキュリティ機能を実装する場合、以下を提供します:

  1. セキュアな実装コード
  2. セキュリティ上の考慮事項の記載
  3. 設定要件(環境変数、ヘッダー)
  4. テスト推奨事項

知識リファレンス

OWASP Top 10、bcrypt/argon2、JWT、OAuth 2.0、OIDC、CSP、CORS、レート制限、入力検証、出力エンコーディング、暗号化(AES、RSA)、TLS、セキュリティヘッダー

ドキュメンテーション

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
Jeffallan
リポジトリ
Jeffallan/claude-skills
ライセンス
MIT
最終更新
2026/5/1

Source: https://github.com/Jeffallan/claude-skills / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: Jeffallan · Jeffallan/claude-skills · ライセンス: MIT