Secure Web App Coding
OWASP Top 10:2025、ASVS 5.0、チートシートシリーズ、および選択されたWSTG資料を、実用的なWebアプリケーションセキュリティガイダンスに変換します。
デフォルト(インライン): 静かにセキュアなコードを書き、近くにある最も影響の大きい問題のみをフラグ付けします。
監査: 「review」「audit」「harden」「is this secure?」、またはインシデントフォローアップ時に、assets/audit-checklist.mdを読み、優先順位付けされた所見を生成します。
モードは、$secure-webapp <mode> で呼び出します:
$secure-webapp audit:完全な優先順位レビュー。assets/audit-checklist.mdを読みます。$secure-webapp quick-check:最高リスクのみのパス。認可、認証/セッション、シークレット、インジェクション/XSS、アップロード、SSRF、トークン。完全なチェックリストレポートはありません。$secure-webapp harden:編集が許可されている場所に直接セキュアな変更を適用。アーキテクチャを維持する小さなパッチ。検証し、製品の承認が必要なものをフラグ付けします。$secure-webapp remediate:監査→修正の反復ループ。最初にassets/remediate-checklist.mdを完全に読みます。$secure-webapp design-review:実装前の脅威モデル。前提条件、信頼境界、悪用ケース、必須の制御、未解決の質問。$secure-webapp report:docs/security-audit-report-YYYY-MM-DD.mdに正式なレポートを作成。最初にassets/report-template.mdを完全に読み、すべての手順に従います。このセッションで事前の監査が必要です。ファイルに書き込み、チャットには絶対に書き込みません。$secure-webapp update:npx --yes github:hov172/secure-webapp-skill --globalを実行してこのインストールを自己更新します。バージョンチェックを行い、新しいリリースが存在する場合のみ再インストールします。フラグ:--claude/--codex/--gemini、--check、--force。$secure-webapp maintain:ソースリポジトリのクローンからスキルパッケージ自体を更新します。scripts/README.mdを参照。
タスクに必要なリファレンスのみを読み込みます。すべてを一括でロードすることは決してしません。
ルーティング
| タスクの内容 | ロードするもの |
|---|---|
| 信頼できない文字列がHTML/DOM/SQL/シェル/NoSQL/LDAP/正規表現/CSVとして解釈される | references/input-handling.md |
| ログイン、サインアップ、パスワード、MFA、リセット、ブルートフォース、セッション、クッキー、ログアウト | references/auth-and-sessions.md |
| 権限、ロール、所有権チェック、IDOR、テナント分離 | references/authorization.md |
| JWT、API/リフレッシュトークン、署名と検証、OAuth/OIDC、PKCE、state | references/tokens-and-oauth.md |
| REST/GraphQL/WebSocketエンドポイント、レート制限、マスアサインメント、レスポンス形状、アップロード/ダウンロード、パストラバーサル、事前署名付きURL | references/apis-and-files.md |
| Secure/HttpOnly/SameSite、CSP、CORS、CSRF、ヘッダー、iframe、postMessage | references/frontend-and-headers.md |
環境変数、.env、鍵、シークレットマネージャー、デバッグモード、デフォルト値 | references/secrets-and-config.md |
| 暗号化、パスワードハッシュ化、アルゴリズム、鍵管理、PII | references/data-and-crypto.md |
| 依存関係、ロックファイル、SBOM、CI/CD、GitHub Actions、署名付きアーティファクト | references/supply-chain.md |
| ユーザー制御の外部URL、SSRF、競合状態、デシリアライゼーション、プロトタイプ汚染 | references/secure-coding.md |
| ロギング、エラーレスポンス、スタックトレース、監査証跡、フェイルクローズ、ロールバック | references/logging-and-errors.md |
| 新機能設計、脅威モデリング、マルチテナンシー、セキュアバイデザインの決定 | references/insecure-design.md |
| LLM/AI機能、プロンプト構築、RAG、エージェントツール呼び出し、MCPサーバー、モデル出力のレンダリングまたは実行 | references/ai-and-llm.md |
常時監視リスト
Webコードでこれらを見かけたら、1つの具体的な修正とともに軽くフラグ付けします:
- リソースルートに対するサーバーサイドの認証/所有権チェックの欠如。
WHERE owner_id = :current_userのようなクエリレベルのスコープ付けを推奨します。 - ハードコードされたシークレット、資格情報、JWTシークレット、APIキー、またはコミットされた
.envファイル。 - 文字列構築のSQL/NoSQL/シェルクエリ。パラメータ化クエリ、安全なビルダー、またはargv APIを使用してください。
- 平文または高速ハッシュのパスワード。argon2id、scrypt、またはbcryptを使用してください。PBKDF2は必要な場合のみ。
- 固定されていないアルゴリズム、
exp/iss/audチェックの欠如、またはコード内のシークレットによるJWT検証。 - ユーザーコンテンツを含む
dangerouslySetInnerHTML、v-html、またはinnerHTML。テキストとしてレンダリングするかサニタイズしてください。 - ワイルドカードまたはエコーされたオリジンを持つ資格情報付きCORS。厳格な許可リストを使用してください。
- ログイン、サインアップ、リセット、MFA/OTP、または高負荷エンドポイントに対するレート制限の欠如。
- 冗長な本番エラー、スタックトレース、SQL/ORMの詳細、またはクライアントに公開されたデバッグモード。
- 検証されていない
next、returnTo、またはURLパラメータからのオープンリダイレクト。 - ユーザー提供のURLからのSSRF。許可リストと、DNSおよびリダイレクト後のプライベートIPブロッキングなし。
- パスワード、トークン、セッションID、シークレット、または不要なPIIを含むログ。
- クライアントのみのセキュリティ制御:隠しフィールド、無効化されたボタン、クライアントロールクレーム、フロントエンドのみの検証。
- サイズ、タイプ、パス、ストレージ、または生成された名前の制御がないファイルアップロード。
- 認証、認可、レート制限、フィーチャーフラグ、またはトランザクション周りのフェイルオープン例外パス。
- 非アトミックな残高、クォータ、支払い、在庫、クーポン、またはワンタイムトークンの状態変更。
- モデル/LLM出力が未チェックでシンクに到達する —
innerHTML、シェル、SQL、ファイルパス、fetchURL、または下流エージェント。信頼できない入力として扱ってください。 - エンドユーザーではなくサービスアカウントに対して認可されたエージェントツール呼び出し、またはプロンプトインジェクションをRCE、SQLi、SSRFに変える汎用的な
run_shell/execute_sql/http_requestツール。 - システムプロンプトに連結された信頼できないテキスト、モデルコンテキスト内のシークレットまたは他のユーザーのデータ。
- ピン留めとロックファイルが期待される場所での可変の依存関係またはCIアクション参照 — 移動されたタグは、そのジョブのシークレットでそのジョブ内で攻撃者コードを実行します。ジョブがデプロイ資格情報、署名鍵、または公開権限を保持している場合は高リスクと評価します。OIDCが存在する長期有効なクラウド資格情報についても同様です。モノレポ内のすべてのワークスペースを監査し、
highより弱い--audit-levelをフラグ付けします。
動作
- デフォルトでセキュアなコードを書き、長い説明は不要。セキュリティ関連の選択を簡潔に名前付けすると役立つ場合があります。
- アプリの重要度に応じた厳格さを適用し、使い捨てのプロトタイプにエンタープライズレベルの制御を強制しないでください。
- 意図的にセキュアでないコードを生成しないでください。安全な代替手段を提供し、制約を一文で述べてください。
- 新しい信頼境界機能の場合、以下を確認:信頼できない入力、認可、障害モード、保存データ、悪用パス。
- 監査時は実際のコードを検査し、必要なスコープ質問のみを行い、重要度 + 場所 + 証拠 + 修正を優先順位付けて報告します。
- 要求されない限り、OWASP要件番号を引用しないでください。
- 侵入テストを実行すると主張しないでください。これはコードおよび設計レビューです。
適用範囲
主流のWebスタック — Next.js、Express、Django、Flask、FastAPI、Rails、Spring、Laravel、Go、および類似のもの。リファレンスがカバーしていないニッチな分野については、推測するのではなく、そう述べて該当するOWASPソースを指摘します。
エージェント非依存:Claude Code、Codex、Gemini CLI、およびスキルまたは AGENTS.md/GEMINI.md を読み込むその他のエージェントで動作します。このファイルがツールを指定している場合、環境に応じた同等のツールを使用してください。