mcpField
S
security-fastapi

security-fastapi

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

security-fastapi について

security-fastapiは、FastAPIアプリケーション向けのセキュリティ監査スキルです。認証依存関係、CORS、ミドルウェアを扱い、APIルートのアクセス制御や本番環境の設定確認に役立ちます。

主な機能

  1. 01ルートの認証依存関係を確認
  2. 02APIキー方式とCORS設定を確認
  3. 03ホストヘッダー対策とHTTPSリダイレクトを確認
  4. 04コマンドでルートと認証の使用状況をスキャン

活用シーン

  1. 01FastAPIルートのアクセス制御を監査
  2. 02認証付きリクエストのCORSオリジンを確認
  3. 03本番環境のホストとHTTPS対策を点検

インストール

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

$npx skills add https://github.com/igorwarzocha/opencode-workflows --skill security-fastapi

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

同梱ファイルscripts/scan.sh

詳細

FastAPI アプリケーションのセキュリティ監査パターンです。認証依存関係、CORS 設定、ミドルウェアのセキュリティを対象としています。

確認すべき主なリスク

ルートに認証がない

FastAPI では、ルートまたはルーターに依存関係を設定して認証・認可を行います。Depends()/Security() が使われていない場合は、意図せず公開されているルートがないか、すべて確認してください。

from fastapi import Depends, Security

@app.get("/private")
async def private_route(user=Depends(get_current_user)):
    return {"ok": True}

@app.get("/scoped")
async def scoped_route(user=Security(get_current_user, scopes=["items"])):
    return {"ok": True}
API キーの方式

API キーを使用する場合は、ヘッダーベースの方式(APIKeyHeader)を優先し、サーバー側でキーを検証することを推奨します。

from fastapi import Depends, FastAPI
from fastapi.security import APIKeyHeader

api_key = APIKeyHeader(name="x-api-key")

@app.get("/items")
async def read_items(key: str = Depends(api_key)):
    return {"key": key}
CORS:認証情報を使用する場合はワイルドカードを避ける

allow_origins=["*"] を使用すると、認証情報付きリクエスト(Cookie/Authorization)は除外されます。認証済みのブラウザークライアントでは、許可するオリジンを明示的に指定する必要があります。

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://app.example.com"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
Host ヘッダーと HTTPS の強制

本番環境では、ホストヘッダー攻撃を防ぎ、HTTPS を強制するために Starlette ミドルウェアを使用することを推奨します。

from starlette.middleware.trustedhost import TrustedHostMiddleware
from starlette.middleware.httpsredirect import HTTPSRedirectMiddleware

app.add_middleware(TrustedHostMiddleware, allowed_hosts=["example.com", "*.example.com"])
app.add_middleware(HTTPSRedirectMiddleware)

クイック監査コマンド

# Detect FastAPI usage
rg -n "fastapi" pyproject.toml requirements*.txt

# Find routes
rg -n "@app\.(get|post|put|patch|delete)" . -g "*.py"

# Check for auth dependencies
rg -n "Depends\(|Security\(" . -g "*.py"

# CORS config and wildcards
rg -n "CORSMiddleware|allow_origins|allow_credentials" . -g "*.py"

# TrustedHost/HTTPS middleware
rg -n "TrustedHostMiddleware|HTTPSRedirectMiddleware" . -g "*.py"

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

  • すべての機密性の高いルートで、Depends() または Security() による認証依存関係を必須にする
  • API キーの方式にはクエリパラメーターではなく、ヘッダー(APIKeyHeader)を使用する
  • allow_credentials=True の場合、allow_origins を明示する
  • 本番環境のドメイン向けに TrustedHostMiddleware を設定する
  • 本番環境で HTTPSRedirectMiddleware を有効にする(またはプロキシで強制する)

スクリプト

  • scripts/scan.sh - FastAPI の初回セキュリティスキャン

コメント