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

clerk-auth

Clerkの認証実装・ミドルウェア・組織管理・Webhook・ユーザー同期に関するベストプラクティスを提供するスキルです。Clerkを使った認証フローの構築や設定で迷ったときに活用できます。

description の原文を見る

Expert patterns for Clerk auth implementation, middleware, organizations, webhooks, and user sync

SKILL.md 本文

Clerk Authentication

Clerk認証実装、ミドルウェア、組織、ウェブフック、ユーザー同期のエキスパートパターン

Patterns

Next.js App Router Setup

Next.js 14/15 App Router向けの完全なClerk設定。

ClerkProvider、環境変数、基本的なサインイン/サインアップコンポーネントが含まれます。

主要なコンポーネント:

  • ClerkProvider: アプリをラップして認証コンテキストを提供
  • <SignIn /><SignUp />: 事前構築された認証フォーム
  • <UserButton />: セッション管理用のユーザーメニュー

Code_example

# 環境変数 (.env.local)
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/onboarding

// app/layout.tsx
import { ClerkProvider } from '@clerk/nextjs';

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <ClerkProvider>
      <html lang="en">
        <body>{children}</body>
      </html>
    </ClerkProvider>
  );
}

// app/sign-in/[[...sign-in]]/page.tsx
import { SignIn } from '@clerk/nextjs';

export default function SignInPage() {
  return (
    <div className="flex justify-center items-center min-h-screen">
      <SignIn />
    </div>
  );
}

// app/sign-up/[[...sign-up]]/page.tsx
import { SignUp } from '@clerk/nextjs';

export default function SignUpPage() {
  return (
    <div className="flex justify-center items-center min-h-screen">
      <SignUp />
    </div>
  );
}

// components/Header.tsx
import { SignedIn, SignedOut, SignInButton, UserButton } from '@clerk/nextjs';

export function Header() {
  return (
    <header className="flex justify-between p-4">
      <h1>My App</h1>
      <SignedOut>
        <SignInButton />
      </SignedOut>
      <SignedIn>
        <UserButton afterSignOutUrl="/" />
      </SignedIn>
    </header>
  );
}

Anti_patterns

  • Pattern: ページコンポーネント内のClerkProvider | 理由: Providerはルートレイアウトで全体をラップする必要がある | 修正: ClerkProviderをapp/layout.tsxに移動
  • Pattern: ミドルウェアなしでauth()を使用 | 理由: auth()はclerkMiddlewareの設定が必要 | 修正: clerkMiddlewareを含むmiddleware.tsをセットアップ

References

Middleware Route Protection

clerkMiddlewareとcreateRouteMatcherを使用してルートを保護します。

ベストプラクティス:

  • プロジェクトルートに単一のmiddleware.tsファイル
  • ルートグループ向けにcreateRouteMatcherを使用
  • 明示的な保護にはauth.protect()を使用
  • 全認証ロジックをミドルウェアに集約

Code_example

// middleware.ts
import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server';

// 保護されたルートパターンを定義
const isProtectedRoute = createRouteMatcher([
  '/dashboard(.*)',
  '/settings(.*)',
  '/api/private(.*)',
]);

// パブリックルートを定義(オプション、明確性のため)
const isPublicRoute = createRouteMatcher([
  '/',
  '/sign-in(.*)',
  '/sign-up(.*)',
  '/api/webhooks(.*)',
]);

export default clerkMiddleware(async (auth, req) => {
  // マッチしたルートを保護
  if (isProtectedRoute(req)) {
    await auth.protect();
  }
});

export const config = {
  matcher: [
    // 静的ファイルを除いた全ルートをマッチ
    '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',
    // APIルートは常に実行
    '/(api|trpc)(.*)',
  ],
};

// 高度な使用: ロールベースの保護
export default clerkMiddleware(async (auth, req) => {
  if (isProtectedRoute(req)) {
    await auth.protect();
  }

  // 管理ルートには管理者ロールが必要
  if (req.nextUrl.pathname.startsWith('/admin')) {
    await auth.protect({
      role: 'org:admin',
    });
  }

  // プレミアムルートはプレミアム権限が必要
  if (req.nextUrl.pathname.startsWith('/premium')) {
    await auth.protect({
      permission: 'org:premium:access',
    });
  }
});

Anti_patterns

  • Pattern: 複数のmiddleware.tsファイル | 理由: 競合とリダイレクトループを引き起こす | 修正: ルートマッチャーを使用して単一のmiddleware.tsを使う
  • Pattern: コンポーネント内での手動リダイレクト | 理由: 二重リダイレクト、ルートの見落とし | 修正: 全リダイレクトをミドルウェアで処理
  • Pattern: matcherの設定が不足 | 理由: ミドルウェアが全ルートで実行されない | 修正: 包括的なmatcherパターンを追加

References

Server Component Authentication

Server Componentsでauth()とcurrentUser()を使用して認証状態にアクセスします。

主要な関数:

  • auth(): userId、sessionId、orgId、claimsを返す
  • currentUser(): 完全なUserオブジェクトを返す
  • 両方ともclerkMiddlewareが設定されている必要がある

Code_example

// app/dashboard/page.tsx (Server Component)
import { auth, currentUser } from '@clerk/nextjs/server';
import { redirect } from 'next/navigation';

export default async function DashboardPage() {
  const { userId } = await auth();

  if (!userId) {
    redirect('/sign-in');
  }

  // 完全なユーザーデータ(レート制限にカウント)
  const user = await currentUser();

  return (
    <div>
      <h1>Welcome, {user?.firstName}!</h1>
      <p>Email: {user?.emailAddresses[0]?.emailAddress}</p>
    </div>
  );
}

// 簡単なチェック向けにauth()を使用
export default async function ProtectedLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  const { userId, orgId, orgRole } = await auth();

  if (!userId) {
    redirect('/sign-in');
  }

  // 組織アクセスをチェック
  if (!orgId) {
    redirect('/select-org');
  }

  return (
    <div>
      <p>Organization Role: {orgRole}</p>
      {children}
    </div>
  );
}

// 認証チェック付きServer Action
// app/actions/posts.ts
'use server';
import { auth } from '@clerk/nextjs/server';

export async function createPost(formData: FormData) {
  const { userId } = await auth();

  if (!userId) {
    throw new Error('Unauthorized');
  }

  const title = formData.get('title') as string;

  // userIdを含めてポストを作成
  const post = await prisma.post.create({
    data: {
      title,
      authorId: userId,
    },
  });

  return post;
}

Anti_patterns

  • Pattern: auth()をawaitしない | 理由: App Routerではauth()は非同期 | 修正: await auth()またはconst { userId } = await auth()を使用
  • Pattern: 簡単なチェック向けにcurrentUser()を使用 | 理由: レート制限にカウント、auth()より遅い | 修正: userIdチェックはauth()を、ユーザーデータはcurrentUser()を使用

References

Client Component Hooks

フックを使用してClient Componentsの認証状態にアクセスします。

主要なフック:

  • useUser(): ユーザーオブジェクトとローディング状態
  • useAuth(): 認証状態、signOutなど
  • useSession(): Sessionオブジェクト
  • useOrganization(): 現在の組織

Code_example

// components/UserProfile.tsx
'use client';
import { useUser, useAuth } from '@clerk/nextjs';

export function UserProfile() {
  const { user, isLoaded, isSignedIn } = useUser();
  const { signOut } = useAuth();

  if (!isLoaded) {
    return <div>Loading...</div>;
  }

  if (!isSignedIn) {
    return <div>Not signed in</div>;
  }

  return (
    <div>
      <img src={user.imageUrl} alt={user.fullName ?? ''} />
      <h2>{user.fullName}</h2>
      <p>{user.emailAddresses[0]?.emailAddress}</p>
      <button onClick={() => signOut()}>Sign Out</button>
    </div>
  );
}

// 組織コンテキスト
'use client';
import { useOrganization, useOrganizationList } from '@clerk/nextjs';

export function OrgSwitcher() {
  const { organization, membership } = useOrganization();
  const { setActive, userMemberships } = useOrganizationList({
    userMemberships: { infinite: true },
  });

  if (!organization) {
    return <p>No organization selected</p>;
  }

  return (
    <div>
      <p>Current: {organization.name}</p>
      <p>Role: {membership?.role}</p>

      <select
        onChange={(e) => setActive?.({ organization: e.target.value })}
        value={organization.id}
      >
        {userMemberships.data?.map((mem) => (
          <option key={mem.organization.id} value={mem.organization.id}>
            {mem.organization.name}
          </option>
        ))}
      </select>
    </div>
  );
}

// 保護されたクライアントコンポーネント
'use client';
import { useAuth } from '@clerk/nextjs';
import { useRouter } from 'next/navigation';
import { useEffect } from 'react';

export function ProtectedContent() {
  const { isLoaded, userId } = useAuth();
  const router = useRouter();

  useEffect(() => {
    if (isLoaded && !userId) {
      router.push('/sign-in');
    }
  }, [isLoaded, userId, router]);

  if (!isLoaded || !userId) {
    return <div>Loading...</div>;
  }

  return <div>Protected content here</div>;
}

Anti_patterns

  • Pattern: isLoadedをチェックしない | 理由: ハイドレーション中に認証状態が未定義 | 修正: ユーザー/認証状態へのアクセス前に常にisLoadedをチェック
  • Pattern: Server Componentsでフックを使用 | 理由: フックはClient Componentsでのみ動作 | 修正: Server ComponentsではuseAuth()とcurrentUser()を使用

References

Organizations and Multi-Tenancy

Clerk Organizationsを使用してB2Bマルチテナンシーを実装します。

機能:

  • ユーザーあたり複数の組織
  • ロールと権限
  • 組織スコープのデータ
  • 組織ごとのエンタープライズSSO

Code_example

// 組織作成UI
// app/create-org/page.tsx
import { CreateOrganization } from '@clerk/nextjs';

export default function CreateOrgPage() {
  return (
    <div className="flex justify-center">
      <CreateOrganization afterCreateOrganizationUrl="/dashboard" />
    </div>
  );
}

// 組織プロファイルと管理
// app/org-settings/page.tsx
import { OrganizationProfile } from '@clerk/nextjs';

export default function OrgSettingsPage() {
  return <OrganizationProfile />;
}

// ヘッダーの組織スイッチャー
// components/Header.tsx
import { OrganizationSwitcher, UserButton } from '@clerk/nextjs';

export function Header() {
  return (
    <header className="flex justify-between p-4">
      <OrganizationSwitcher
        hidePersonal
        afterCreateOrganizationUrl="/dashboard"
        afterSelectOrganizationUrl="/dashboard"
      />
      <UserButton />
    </header>
  );
}

// 組織スコープのデータアクセス
// app/dashboard/page.tsx
import { auth } from '@clerk/nextjs/server';
import { prisma } from '@/lib/prisma';

export default async function DashboardPage() {
  const { orgId } = await auth();

  if (!orgId) {
    redirect('/select-org');
  }

  // 組織スコープのデータを取得
  const projects = await prisma.project.findMany({
    where: { organizationId: orgId },
  });

  return (
    <div>
      <h1>Projects</h1>
      {projects.map((p) => (
        <div key={p.id}>{p.name}</div>
      ))}
    </div>
  );
}

// ロールベースUI
'use client';
import { useOrganization, Protect } from '@clerk/nextjs';

export function AdminPanel() {
  const { membership } = useOrganization();

  // Protectコンポーネントを使用
  return (
    <Protect role="org:admin" fallback={<p>Admin access required</p>}>
      <div>Admin content here</div>
    </Protect>
  );

  // または手動チェック
  if (membership?.role !== 'org:admin') {
    return <p>Admin access required</p>;
  }

  return <div>Admin content here</div>;
}

Anti_patterns

  • Pattern: orgIdでデータをスコープしない | 理由: 組織間でデータが漏洩 | 修正: 常にauth()からのorgIdでクエリをフィルタリング
  • Pattern: ロール文字列をハードコード | 理由: タイポでアクセス問題が発生 | 修正: ロール定数を定義またはTypeScript enumを使用

References

Webhook User Sync

ウェブフックを使用してClerkユーザーをデータベースに同期します。

主要なウェブフック:

  • user.created: 新しいユーザーがサインアップ
  • user.updated: ユーザープロファイルが変更
  • user.deleted: ユーザーがアカウントを削除

署名検証にはsvixを使用します。

Code_example

// app/api/webhooks/clerk/route.ts
import { Webhook } from 'svix';
import { headers } from 'next/headers';
import { WebhookEvent } from '@clerk/nextjs/server';
import { prisma } from '@/lib/prisma';

export async function POST(req: Request) {
  const WEBHOOK_SECRET = process.env.CLERK_WEBHOOK_SECRET;

  if (!WEBHOOK_SECRET) {
    throw new Error('Missing CLERK_WEBHOOK_SECRET');
  }

  // ヘッダーを取得
  const headerPayload = await headers();
  const svix_id = headerPayload.get('svix-id');
  const svix_timestamp = headerPayload.get('svix-timestamp');
  const svix_signature = headerPayload.get('svix-signature');

  if (!svix_id || !svix_timestamp || !svix_signature) {
    return new Response('Missing svix headers', { status: 400 });
  }

  // ボディを取得
  const payload = await req.json();
  const body = JSON.stringify(payload);

  // ウェブフックを検証
  const wh = new Webhook(WEBHOOK_SECRET);
  let evt: WebhookEvent;

  try {
    evt = wh.verify(body, {
      'svix-id': svix_id,
      'svix-timestamp': svix_timestamp,
      'svix-signature': svix_signature,
    }) as WebhookEvent;
  } catch (err) {
    console.error('Webhook verification failed:', err);
    return new Response('Verification failed', { status: 400 });
  }

  // イベントを処理
  const eventType = evt.type;

  if (eventType === 'user.created') {
    const { id, email_addresses, first_name, last_name, image_url } = evt.data;

    await prisma.user.create({
      data: {
        clerkId: id,
        email: email_addresses[0]?.email_address,
        firstName: first_name,
        lastName: last_name,
        imageUrl: image_url,
      },
    });
  }

  if (eventType === 'user.updated') {
    const { id, email_addresses, first_name, last_name, image_url } = evt.data;

    await prisma.user.update({
      where: { clerkId: id },
      data: {
        email: email_addresses[0]?.email_address,
        firstName: first_name,
        lastName: last_name,
        imageUrl: image_url,
      },
    });
  }

  if (eventType === 'user.deleted') {
    const { id } = evt.data;

    await prisma.user.delete({
      where: { clerkId: id! },
    });
  }

  return new Response('Webhook processed', { status: 200 });
}

// Prismaスキーマ
// prisma/schema.prisma
model User {
  id        String   @id @default(cuid())
  clerkId   String   @unique
  email     String   @unique
  firstName String?
  lastName  String?
  imageUrl  String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  posts     Post[]
  @@index([clerkId])
}

Anti_patterns

  • Pattern: ウェブフック署名を検証しない | 理由: 誰でも偽データを含むエンドポイントをヒットできる | 修正: svixで常に検証
  • Pattern: ウェブフックルートをミドルウェアでブロック | 理由: ウェブフックはClerkから来ており、認証されたユーザーではない | 修正: /api/webhooks(.*)' をパブリックルートに追加
  • Pattern: レース条件を処理しない | 理由: user.createdがuser.updatedの後に到達する可能性がある | 修正: createではなくupsertを使用、見落とされたレコードを処理

References

API Route Protection

Clerkのauth()を使用してAPIルートを保護します。

App RouterのRoute HandlersはauthのCharts()を使用して認証します。 ミドルウェアは初期保護を提供し、auth()はハンドラー内の検証を提供します。

Code_example

// app/api/projects/route.ts
import { auth } from '@clerk/nextjs/server';
import { prisma } from '@/lib/prisma';
import { NextResponse } from 'next/server';

export async function GET() {
  const { userId, orgId } = await auth();

  if (!userId) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  // ユーザーのパーソナルプロジェクトまたは組織プロジェクト
  const projects = await prisma.project.findMany({
    where: orgId
      ? { organizationId: orgId }
      : { userId, organizationId: null },
  });

  return NextResponse.json(projects);
}

export async function POST(req: Request) {
  const { userId, orgId } = await auth();

  if (!userId) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  const body = await req.json();

  const project = await prisma.project.create({
    data: {
      name: body.name,
      userId,
      organizationId: orgId ?? null,
    },
  });

  return NextResponse.json(project, { status: 201 });
}

// ロールチェック付きで保護
// app/api/admin/users/route.ts
export async function GET() {
  const { userId, orgRole } = await auth();

  if (!userId) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  if (orgRole !== 'org:admin') {
    return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
  }

  // 管理者のみロジック
  const users = await prisma.user.findMany();
  return NextResponse.json(users);
}

// 古いパターンではgetAuthを使用(推奨されません)
// 後方互換性のみ
import { getAuth } from '@clerk/nextjs/server';

export async function GET(req: Request) {
  const { userId } = getAuth(req);
  // ...
}

Anti_patterns

  • Pattern: ミドルウェアのみを信頼 | 理由: ミドルウェアはバイパス可能(CVE-2025-29927) | 修正: ルートハンドラーでも常に認証を検証
  • Pattern: マルチテナント向けにorgIdをチェックしない | 理由: ユーザーが他の組織のデータにアクセスする可能性 | 修正: 常にauth()からのorgIdでフィルタリング

References

Sharp Edges

CVE-2025-29927 Middleware Bypass Vulnerability

Severity: CRITICAL

Multiple Middleware Files Cause Conflicts

Severity: HIGH

4KB Session Token Cookie Limit

Severity: HIGH

auth() Requires clerkMiddleware Configuration

Severity: HIGH

Webhook Race Conditions

Severity: MEDIUM

auth() is Async in App Router

Severity: MEDIUM

Middleware Blocks Webhook Endpoints

Severity: MEDIUM

Accessing Auth State Before isLoaded

Severity: MEDIUM

Manual Redirects Cause Double Redirects

Severity: MEDIUM

Organization Data Not Scoped by orgId

Severity: HIGH

Validation Checks

Clerk Secret Key in Client Code

Severity: ERROR

CLERK_SECRET_KEYはサーバーサイドのみで使用する必要があります

Message: Clerk秘密鍵がクライアントに露出しています。NEXT_PUBLIC接頭辞なしでCLERK_SECRET_KEYを使用してください。

Protected Route Without Middleware

Severity: ERROR

APIルートはミドルウェア保護が必要です

Message: ミドルウェア保護なしのAPIルート。ミドルウェア保護またはauth()チェックを追加してください。

Hardcoded Clerk API Keys

Severity: ERROR

Clerk鍵は環境変数を使用する必要があります

Message: Clerkキーがハードコードされています。環境変数を使用してください。

Missing Await on auth()

Severity: ERROR

App Routerではauth()は非同期で、awaitが必須です

Message: auth()がawaitされていません。App Routerで'await auth()'を使用してください。

Multiple Middleware Files

Severity: WARNING

1つのmiddleware.tsファイルのみが存在する必要があります

Message: 複数のミドルウェアファイルが検出されました。単一のmiddleware.tsを使用してください。

Webhook Route Not Excluded from Protection

Severity: WARNING

ウェブフックルートはパブリックである必要があります

Message: ウェブフックルートがミドルウェアでブロックされている可能性があります。パブリックルートに追加してください。

Accessing Auth Without isLoaded Check

Severity: WARNING

クライアントコンポーネントでユーザー状態にアクセスする前にisLoadedをチェック

Message: isLoadedチェックなしでユーザーにアクセスしています。最初にisLoadedをチェックしてください。

Clerk Hooks in Server Component

Severity: ERROR

Clerkフックはクライアントコンポーネントでのみ動作します

Message: Server ComponentでClerkフック。'use client'を追加するか、auth()を使用してください。

Multi-Tenant Query Without orgId

Severity: WARNING

組織データはorgIdでスコープされる必要があります

Message: 組織スコープなしのクエリ。マルチテナンシー向けにorgIdでフィルタリングしてください。

Webhook Without Signature Verification

Severity: ERROR

Clerkウェブフックはsvix署名を検証する必要があります

Message: 署名検証なしウェブフック。svixで検証してください。

Collaboration

Delegation Triggers

  • ユーザーがデータベースを必要とする -> postgres-wizard (clerkIdを含むUserテーブル)
  • ユーザーが支払いを必要とする -> stripe-integration (Clerkユーザーにリンクされた顧客)
  • ユーザーが検索を必要とする -> algolia-search (ユーザーあたりのセキュアAPIキー)
  • ユーザーがアナリティクスを必要とする -> segment-cdp (ユーザー識別)
  • ユーザーがメール送信を必要とする -> resend-email (トランザクションメール)

When to Use

  • ユーザーが以下を述べるまたは暗に示す場合: 認証を追加
  • ユーザーが以下を述べるまたは暗に示す場合: clerk認証
  • ユーザーが以下を述べるまたは暗に示す場合: ユーザー認証
  • ユーザーが以下を述べるまたは暗に示す場合: サインイン
  • ユーザーが以下を述べるまたは暗に示す場合: サインアップ
  • ユーザーが以下を述べるまたは暗に示す場合: ユーザー管理
  • ユーザーが以下を述べるまたは暗に示す場合: マルチテナンシー
  • ユーザーが以下を述べるまたは暗に示す場合: 組織
  • ユーザーが以下を述べるまたは暗に示す場合: SSO
  • ユーザーが以下を述べるまたは暗に示す場合: シングルサインオン

Limitations

  • 上記で説明されたスコープに明確に一致するタスクでのみこのスキルを使用してください。
  • 出力を環境固有の検証、テスト、またはエキスパートレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全境界、成功基準が不足している場合は、一度立ち止まって明確化を求めてください。

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

詳細情報

作者
sickn33
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

Anthropic Claudeセキュリティ⭐ リポ 8,981

secure-code-guardian

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

by Jeffallan
汎用セキュリティ⭐ リポ 1,982

claude-authenticity

APIエンドポイントが本物のClaudeによって支えられているか(ラッパーやプロキシ、偽装ではないか)を、claude-verifyプロジェクトを模した9つの重み付きルールベースチェックで検証できます。また、Claudeの正体を上書きしているプロバイダーから注入されたシステムプロンプトも抽出します。完全に自己完結しており、httpx以外の追加パッケージは不要です。Claude APIキーまたはエンドポイントを検証したい場合、サードパーティのClaudeサービスが本物か確認したい場合、APIプロバイダーのClaude正当性を監査したい場合、複数モデルを並行してテストしたい場合、またはプロバイダーが注入したシステムプロンプトを特定したい場合に使用できます。

by LeoYeAI
Anthropic Claudeセキュリティ⭐ リポ 2,159

anth-security-basics

Anthropic Claude APIのセキュリティベストプラクティスを適用し、キー管理、入力値の検証、プロンプトインジェクション対策を実施します。APIキーの保護、Claudeに送信する前のユーザー入力検証、コンテンツセーフティガードレールの実装が必要な場合に活用できます。「anthropic security」「claude api key security」「secure anthropic」「prompt injection defense」といったフレーズでトリガーされます。

by jeremylongshore
汎用セキュリティ⭐ リポ 699

x-ray

x-ray.mdプレ監査レポートを生成します。概要、強化された脅威モデル(プロトコルタイプのプロファイリング、Gitの重み付け攻撃面分析、時間軸リスク分析、コンポーザビリティ依存関係マッピング)、不変条件、統合、ドキュメント品質、テスト分析、開発者・Gitの履歴をカバーしています。「x-ray」「audit readiness」「readiness report」「pre-audit report」「prep this protocol」「protocol prep」「summarize this protocol」のキーワードで実行されます。

by pashov
汎用セキュリティ⭐ リポ 677

semgrep

Semgrepスタティック分析スキャンを実行し、カスタム検出ルールを作成します。Semgrepでのコードスキャン、セキュリティ脆弱性の検出、カスタムYAMLルールの作成、または特定のバグパターンの検出が必要な場合に使用します。重要:ユーザーが「バグをスキャンしたい」「コード品質を確認したい」「脆弱性を見つけたい」「スタティック分析」「セキュリティlint」「コード監査」または「コーディング標準を適用したい」と尋ねた場合も、Semgrepという名称を明記していなくても、このスキルを使用してください。Semgrepは30以上の言語に対応したパターンベースのコードスキャンに最適なツールです。

by wimpysworld
汎用セキュリティ⭐ リポ 591

ghost-bits-cast-attack

Java「ゴーストビッツ」/キャストアタック プレイブック(Black Hat Asia 2026)。16ビット文字が8ビットバイトに暗黙的に縮小されるJavaサービスへの攻撃時に使用します。WAF/IDSを回避して、SQLインジェクション、デシリアライゼーション型RCE、ファイルアップロード(Webシェル)、パストトラバーサル、CRLF インジェクション、リクエストスマグリング、SMTPインジェクションを実行できます。Tomcat、Spring、Jetty、Undertow、Vert.x、Jackson、Fastjson、Apache Commons BCEL、Apache HttpClient、Angus Mail、JDK HttpServer、Lettuce、Jodd、XMLWriterに影響し、WAFバイパスにより多くの「パッチ済み」CVEを再度有効化します。

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