security-fastapi について
security-fastapiは、FastAPIアプリケーション向けのセキュリティ監査スキルです。認証依存関係、CORS、ミドルウェアを扱い、APIルートのアクセス制御や本番環境の設定確認に役立ちます。
主な機能
- 01ルートの認証依存関係を確認
- 02APIキー方式とCORS設定を確認
- 03ホストヘッダー対策とHTTPSリダイレクトを確認
- 04コマンドでルートと認証の使用状況をスキャン
活用シーン
- 01FastAPIルートのアクセス制御を監査
- 02認証付きリクエストのCORSオリジンを確認
- 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 の初回セキュリティスキャン
コメント
Markdown 対応