AIセキュリティ 2025年10月27日

セキュアなAI開発のためのプロンプト設計

AI生成コードのセキュリティは、**プロンプトの質** に大きく依存します。 この章では、セキュリティを担保するプロンプト設計を解説します。 **悪いプロンプト:** ログイン機能を作って このプロンプトでは、AIは「動く」ログイン機能を作りますが、セキュリティは考慮されません。

川西智也

合同会社ロイヤルピース 代表

セキュリティを担保するプロンプト設計

AI開発プロンプトがセキュリティを決める

AI生成コードのセキュリティは、プロンプトの質 に大きく依存します。

“セキュリティ要件を明示しなければ、AIはセキュリティを考慮しない”

この章では、セキュリティを担保するプロンプト設計を解説します。


悪いプロンプトと良いプロンプト

悪いプロンプト:

ログイン機能を作って

このプロンプトでは、AIは「動く」ログイン機能を作りますが、セキュリティは考慮されません。

良いプロンプト:

ログイン機能を作って:

## 【必須】セキュリティ要件
- パスワードはbcryptでハッシュ化(コスト12以上)
- SQLインジェクション対策(プリペアドステートメント使用)
- レートリミット実装(5回/分)
- JWTの有効期限は1時間
- Cookieはhttponly, secure, samesiteフラグ設定
- 入力値のバリデーション実装
- エラーメッセージでユーザー存在を漏らさない

セキュリティプロンプトテンプレート

汎用的に使えるセキュリティプロンプトテンプレートを紹介します。

認証機能の実装ポイント機能

## 実装すべき機能要件
- [具体的な機能を記述]

## 【必須】セキュリティ要件
- [ ] パスワードハッシュ: bcrypt(コスト12以上)
- [ ] セッション管理: JWT(有効期限1時間)
- [ ] Cookie設定: HttpOnly, Secure, SameSite=Strict
- [ ] レート制限: 5回/15分
- [ ] アカウントロック: 5回失敗で30分
- [ ] 入力バリデーション: zodスキーマ
- [ ] SQLインジェクション対策: プリペアドステートメント
- [ ] ログ: 認証イベントを記録(パスワードは除外)

## AI開発で避けるべき禁止事項
- [ ] 平文パスワード保存
- [ ] MD5/SHA-1使用
- [ ] クライアントサイド認証
- [ ] パスワードのログ出力

API開発

## 実装すべき機能要件
- [具体的なエンドポイントを記述]

## 【必須】セキュリティ要件
- [ ] 認証: すべてのエンドポイントで検証
- [ ] 認可: ユーザーごとのアクセス制御
- [ ] 入力バリデーション: zodスキーマ
- [ ] レスポンス: 機密情報を含めない
- [ ] エラー処理: 詳細を漏らさない
- [ ] レート制限: 100回/分
- [ ] CORS: 必要なオリジンのみ許可
- [ ] HTTPS: 強制

## AI開発で避けるべき禁止事項
- [ ] APIキーのハードコード
- [ ] 機密情報のレスポンス含有
- [ ] 認証なしのエンドポイント

フロントエンド

## 実装すべき機能要件
- [具体的なUIを記述]

## 【必須】セキュリティ要件
- [ ] XSS対策: ユーザー入力のエスケープ
- [ ] CSRF対策: トークン使用
- [ ] 機密情報: フロントエンドに含めない
- [ ] 認証トークン: HttpOnly Cookieで管理
- [ ] CSP: 適切なヘッダー設定

## AI開発で避けるべき禁止事項
- [ ] innerHTML使用
- [ ] dangerouslySetInnerHTML使用
- [ ] APIキーの埋め込み
- [ ] eval()の使用

OWASP Top 10対応プロンプト

OWASP Top 10に対応するプロンプト要素を紹介します。

## OWASP Top 10 対策(必須チェック)

### A01: 認証の不備
- [ ] サーバーサイドで認証
- [ ] 強力なパスワードポリシー
- [ ] MFA対応(可能なら)

### A02: 暗号化の失敗
- [ ] パスワードはbcrypt
- [ ] 通信はHTTPS
- [ ] 機密データは暗号化

### A03: インジェクション
- [ ] プリペアドステートメント
- [ ] 入力バリデーション
- [ ] 出力エスケープ

### A04: 安全でない設計
- [ ] 最小権限の原則
- [ ] 多層防御
- [ ] 失敗時は安全に

### A05: セキュリティ設定ミス
- [ ] デフォルトパスワード変更
- [ ] 不要な機能の無効化
- [ ] エラーメッセージの制限

### A06: 脆弱なコンポーネント
- [ ] 最新版のライブラリ
- [ ] 依存関係の監査
- [ ] パッチの適用

### A07: 識別と認証の失敗
- [ ] セッション管理の適切な実装
- [ ] ログアウト時のトークン無効化
- [ ] セッションタイムアウト

### A08: データの完全性
- [ ] 署名の検証
- [ ] 安全なデシリアライゼーション

### A09: ログとモニタリング
- [ ] セキュリティイベントのログ
- [ ] 機密情報のログ除外
- [ ] 異常検知

### A10: SSRF
- [ ] URL検証
- [ ] 内部リソースへのアクセス制限

AI開発コンテキストファイルの活用

プロジェクト全体でセキュリティ要件を統一するために、コンテキストファイルを活用しましょう。

SECURITY.md:

# セキュリティ要件

## 認証機能の実装ポイント
- bcrypt(コスト12)
- JWT(有効期限1時間)
- レート制限(5回/15分)

## データベース
- プリペアドステートメント必須
- RLS設定必須

## API
- すべてのエンドポイントで認証検証
- 入力バリデーション必須
- レスポンスに機密情報を含めない

## フロントエンド
- innerHTML禁止
- APIキー埋め込み禁止
- CSPヘッダー設定

## AI開発で避けるべき禁止事項
- 平文パスワード
- MD5/SHA-1
- eval()
- document.write()

レビュー用プロンプト

生成されたコードをレビューさせるプロンプトも有効です。

以下のコードをセキュリティの観点からレビューして:

## チェック項目
1. SQLインジェクションの可能性
2. XSSの可能性
3. 認証・認可の不備
4. 機密情報の露出
5. 入力バリデーションの欠如
6. エラーハンドリングの問題

## 期待する出力形式の指定
- 問題点(深刻度: 高/中/低)
- 具体的な行番号
- 修正案

[コードをここに貼り付け]

この事例から学ぶべき教訓と実践ポイント

「セキュリティプロンプト設計」から学ぶべきことは以下の通りです。

  1. プロンプトがセキュリティを決める

    • 明示しなければ考慮されない
  2. テンプレートを使う

    • 認証、API、フロントエンド用
  3. OWASP Top 10を意識

    • すべての項目をカバー
  4. コンテキストファイルで統一

    • SECURITY.mdで要件を共有
  5. レビュー用プロンプトも活用

    • 生成後のチェック

まとめ:重要ポイントの振り返り

  • プロンプトがセキュリティを決める
  • テンプレート を使って漏れを防ぐ
  • OWASP Top 10 をカバー
  • SECURITY.md で要件を統一
  • レビュープロンプト で生成後もチェック
  • 教訓:セキュリティは「明示的に依頼」しなければ実装されない

実践的なスキルを習得しませんか?

ブログで学んだ知識を、研修で実践に変えましょう。