# Security Audit

> Python コードのセキュリティ脆弱性を検出・分析し、ベストプラクティスを提案する skill

- Skill: `aibot88/security-audit-3` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add aibot88/security-audit-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aibot88/security-audit-3/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: aibot88 (https://skillmd.com/u/aibot88)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/aibot88/security-audit-3

---


# Security Audit Skill

Python コードのセキュリティをレビューするときは、このチェックリストと分析パターンを使ってください。

## セキュリティ脆弱性チェックリスト

### 入力バリデーション
- [ ] すべてのユーザー入力が検証されているか
- [ ] SQL インジェクションのリスクがないか
- [ ] ファイルパストラバーサルのリスクがないか
- [ ] バッファオーバーフローのリスクがないか
- [ ] 型チェックが適切に行われているか

### 認証・認可
- [ ] パスワードが平文で保存されていないか
- [ ] パスワードが十分なハッシュ関数（bcrypt, argon2）を使用しているか
- [ ] JWT トークンの検証が行われているか
- [ ] セッション管理が適切か
- [ ] 権限チェックが実装されているか

### 暗号化・データ保護
- [ ] 機密データが暗号化されているか
- [ ] 通信が HTTPS/TLS で保護されているか
- [ ] キーの管理が安全か（環境変数、シークレット管理）
- [ ] ログに機密情報が含まれていないか

### エラーハンドリング
- [ ] エラーメッセージが詳細すぎないか（情報漏洩のリスク）
- [ ] 例外を適切にキャッチしているか（bare except なし）
- [ ] スタックトレースが公開されていないか

### 外部依存
- [ ] サードパーティライブラリが信頼できるか
- [ ] 依存関係が最新版か（セキュリティパッチが当たっているか）
- [ ] 不要な依存関係を削除しているか

### コード実行
- [ ] eval(), exec() を使用していないか
- [ ] pickle を信頼できないデータで使用していないか
- [ ] subprocess で shell=True を使用していないか
- [ ] 動的コード生成が安全か

### ファイルアクセス
- [ ] ファイルパーミッションが適切か
- [ ] ファイルの読み書き時に例外処理をしているか
- [ ] 一時ファイルが安全に作成・削除されているか
- [ ] 機密ファイルがバージョン管理に含まれていないか

### 環境設定
- [ ] API キーがハードコードされていないか
- [ ] Debug モードが本番環境で有効になっていないか
- [ ] デフォルト認証情報を使用していないか

## セキュリティ分析パターン

### パターン 1: 入力バリデーション関数の分析

```python
# チェックするコード
def validate_and_process_user_input(user_input: str) -> dict:
    """ユーザー入力を検証して処理する."""
    # 分析ポイント:
    # 1. 入力の型チェックがあるか
    # 2. 長さ制限があるか
    # 3. 許可される文字が制限されているか
    # 4. 範囲チェックがあるか
    # 5. エラーハンドリングが適切か
    pass
```

### パターン 2: 認証・パスワード処理の分析

```python
# チェックするコード
def hash_password(password: str) -> str:
    """パスワードをハッシュ化する."""
    # 分析ポイント:
    # 1. ハッシュ関数は安全か (bcrypt, argon2, scrypt vs MD5, SHA1)
    # 2. ソルトが使用されているか
    # 3. イテレーション回数は十分か
    # 4. メモリコストの設定は適切か
    pass
```

### パターン 3: 外部データ処理の分析

```python
# チェックするコード
import pickle

def load_data(filename: str):
    """ファイルからデータを読み込む."""
    # 分析ポイント:
    # 1. pickle を信頼できないソースで使用していないか
    # 2. json, yaml, xml は安全か
    # 3. シリアライゼーション方式の安全性
    pass
```

## 出力フォーマット

次の形式で結果をまとめてください。

```
# Security Audit: [filename]

## 総合リスク評価: [LOW / MEDIUM / HIGH / CRITICAL]

## 検出された脆弱性

### 脆弱性 1: [タイトル]
**重大度**: [LOW / MEDIUM / HIGH / CRITICAL]
**ファイル/行番号**: [location]
**説明**: [詳細説明]
**影響**: [セキュリティへの影響]

```python
# 問題のあるコード
problematic_code()
```

**修正提案**:
```python
# 修正後のコード
fixed_code()
```

---

### 脆弱性 2: [タイトル]
[同じフォーマット]

## セキュリティベストプラクティスの実装状況

- [ ] 入力バリデーション: [完全 / 部分的 / 未実装]
- [ ] 認証: [完全 / 部分的 / 未実装]
- [ ] 暗号化: [完全 / 部分的 / 未実装]
- [ ] エラーハンドリング: [完全 / 部分的 / 未実装]
- [ ] ログ記録: [完全 / 部分的 / 未実装]

## 改善の優先順位

### 緊急 (CRITICAL)
1. [脆弱性]

### 高 (HIGH)
1. [脆弱性]

### 中 (MEDIUM)
1. [脆弱性]

### 低 (LOW)
1. [脆弱性]

## 推奨する次のステップ

1. [提案1]
2. [提案2]
3. [提案3]
```

## チェックリスト別の分析方法

### 1. パスワードセキュリティ分析

パスワード処理関数を見つけたら、以下をチェック:
- ハッシュ関数の種類
- ソルトの存在と生成方法
- ストレッチング回数
- タイミング攻撃対策

### 2. 入力バリデーション分析

外部入力を受け取るすべての場所をチェック:
- 型チェック
- 長さチェック
- 文字種チェック
- 範囲チェック

### 3. 依存関係分析

`requirements.txt` を見つけたら、以下をチェック:
- パッケージのバージョン固定方法
- セキュリティアップデートの頻度

### 4. 設定・環境分析

`.env`, `config.py` などを見つけたら:
- ハードコードされた秘密情報
- デバッグモードの有効化
- デフォルト認証情報

## 参考リソース

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [Python セキュリティ ベストプラクティス](https://python.readthedocs.io/en/latest/library/security_warnings.html)
- [CWE - Common Weakness Enumeration](https://cwe.mitre.org/)
- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)

