0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実践】Claude Codeが生成したコードのセキュリティを3分でチェックする方法

0
Posted at

はじめに

Claude Codeの開発速度は凄まじい。CLAUDE.mdを整備してSkillsを組めば、1日で動くプロダクトが出来上がる。

でも、ふと気づいた。「動く」と「安全」は別物だということに。

私は2週間前、自分がClaude Codeで生成したコードをセキュリティスキャンにかけてみた。結果、テストが全部通っているコードから複数の脆弱性パターンが検出された。

この記事では、AI生成コードのセキュリティチェックを3分で終わらせる方法を紹介する。

なぜAI生成コードのセキュリティチェックが必要なのか

先日、AI評価機関METRが興味深い調査結果を発表した。

SWE-benchのテストに合格したPRでも、人間のレビュアーはマージを拒否する

テストが通る。アプリも動く。でもコードとしてはマージできない品質 — その中にセキュリティの問題が含まれている。

私が実際にAI生成コードをスキャンして頻繁に見つけたパターンがこれだ:

パターン1: シークレットのハードコード

// Claude Codeが「とりあえず動くように」生成しがち
const API_KEY = "sk-proj-abc123...";

.envに分離すべきなのは分かっている。でもAIは「動くコード」を最優先で生成するので、ハードコードされたまま出てくることがある。特にプロトタイプや検証コードで頻出する。

パターン2: 過剰に寛容なCORS

// 開発環境では問題ないが本番ではNG
app.use(cors({ origin: '*' }));

Claude Codeに「APIを作って」と指示すると、高確率でこのパターンが出てくる。開発中は問題ないので気づきにくい。

パターン3: 入力値の未検証

// ユーザー入力をそのまま使用
const userId = req.params.id;
const result = await db.query(`SELECT * FROM users WHERE id = ${userId}`);

テストでは正常値しか渡さないので通る。本番で悪意あるリクエストが来たら終わり。

パターン4: eval / Function の使用

// 「動的にコードを実行したい」というプロンプトに対してAIが生成
const result = eval(userInput);

AIに「柔軟な処理」を求めると、evalnew Function()が出てくることがある。テストは通る。でもこれは任意コード実行の脆弱性だ。

3分でチェックする手順

Step 1: コードをコピー(30秒)

Claude Codeが生成したコード — 例えばAPIルート、コンポーネント、ユーティリティ関数など — をコピーする。

ファイル単位でもいいし、気になる部分だけでもいい。

Step 2: スキャンを実行(30秒)

CodeHealにアクセスして、コードを貼り付け。言語を選択して「Scan」ボタンを押す。

スキャンは数秒で完了する。LLMを使わない純粋な静的解析なので、待ち時間はほぼゼロ

Step 3: 結果を確認して対処(2分)

スキャン結果には以下が表示される:

  • リスクスコア: 0-100のスコア。高いほど危険
  • 検出された脆弱性: カテゴリ別に分類
  • 該当箇所: コードのどの部分が問題か
  • 深刻度: Critical / High / Medium / Low

Criticalが出たら即修正。Highは本番デプロイ前に対処。Medium以下は時間があるときに。

実際にスキャンしてみた結果

私が開発中のSaaSプロジェクトで、Claude Codeが生成したコードをスキャンした実例を紹介する。

ケース1: Express APIサーバー

Claude Codeに「Express + PostgreSQLのCRUD APIを作って」と指示して生成されたコード。

検出結果:

  • cors({ origin: '*' }) → CORS設定の脆弱性
  • テンプレートリテラルでのSQL構築 → SQLインジェクションリスク
  • process.env.DB_PASSWORD のフォールバックにハードコード値 → シークレット漏洩

テストは全部通っていた。でもスキャナーは3つの問題を検出した。

ケース2: Next.js APIルート

「NextAuth.jsでGitHub OAuthを設定して」と指示したコード。

検出結果:

  • NEXTAUTH_SECRET が短すぎる文字列でハードコード → セッションハイジャックリスク
  • CSRF保護の設定漏れ

これもテストでは気づけない。OAuthフローは正常に動作するので。

ケース3: ファイル操作ユーティリティ

「ファイルをアップロードして保存する関数を作って」と指示したコード。

検出結果:

  • パストラバーサル未対策 → ../../etc/passwd のようなパスで任意ファイル読み取り
  • ファイルサイズ制限なし → DoS攻撃の可能性

CLAUDE.mdにセキュリティルールを追加する

スキャンで見つかる問題をそもそも生成させないのが理想だ。CLAUDE.mdにセキュリティルールを書いておくと、Claude Codeが最初から安全なコードを生成しやすくなる。

# CLAUDE.md に追記

## セキュリティルール
- APIキー・シークレットは必ず環境変数(.env)から読み込む。ハードコード禁止
- CORSは許可するオリジンを明示的に指定する(origin: '*' 禁止)
- SQLクエリは必ずパラメータ化する。テンプレートリテラルでの直接埋め込み禁止
- ユーザー入力は信頼境界で必ずバリデーション・サニタイズする
- eval() / new Function() は使用禁止
- ファイルパスはpath.resolve + ベースディレクトリチェックでパストラバーサル対策する

これを入れてからAI生成コードの品質が明らかに変わった。ただし、CLAUDE.mdだけでは100%防げない。生成後のスキャンとの二重チェックが安全。

まとめ

ステップ 所要時間 やること
事前対策 5分(初回のみ) CLAUDE.mdにセキュリティルールを追記
Step 1 30秒 コードをコピー
Step 2 30秒 CodeHealでスキャン実行
Step 3 2分 結果を確認して対処

開発速度を上げるTipsと、セキュリティチェックは両立できる。

Claude Codeで速く書いて、スキャンで安全を確認する。このサイクルを回すだけで、AI生成コードの品質は大きく変わる。


関連記事


AI生成コード、スキャンしてみませんか?

CodeHealは14カテゴリ・93ルールの静的解析でAI生成コードの脆弱性を検出します。LLM不使用なので結果は毎回同じ。API費用もゼロ。

無料でスキャンする →

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?