AIによるテスト作成とコードのセキュリティ強化

開発者のための AI 支援コーディング

Francesca Donadoni

AI Curriculum Manager, DataCamp

テスト駆動プロンプト

☺ 通常のプロンプト

メールアドレスを解析するPython関数を書いてください。

🤓 テスト駆動プロンプト

メールアドレスを解析するPython関数を書いてください。以下のテストに合格する必要があります:

  • [email protected]」のような有効なアドレスを受け付ける。
  • 「user@@domain」のような無効な入力を拒否する。
  • 空の入力に対してValueErrorを発生させる。
開発者のための AI 支援コーディング

テスト駆動プロンプト

  • ユーザープロンプト: ユーザー入力のフォームデータを処理してSQLデータベースに挿入する関数に対し、Pythonのユニットテストを生成してください。

  • モデルの回答:

バリデーション、正規化、SQLインジェクション対策、トランザクション動作を網羅した、すぐに実行可能なpytestスイートです。

[...]
# ---------- Test DB fixtures ----------

@pytest.fixture()
def conn():
    """In-memory SQLite DB with a users table."""
    c = sqlite3.connect(":memory:") [...]
開発者のための AI 支援コーディング

テスト駆動プロンプト

  • ユーザープロンプト: 以下の関数に対し、pytestを使用したPythonのユニットテストを生成してください。空入力、SQLキーワードの入力、特殊文字のケースを含めてください。データベース接続はモックを使用することを前提とします。 <INSERT FUNCTION>

  • モデルの回答:

モック(実DBなし)を使用し、空入力・SQLキーワード・特殊文字を網羅した自己完結型のpytestモジュールです。commit/closeの動作確認や例外処理の検証も含まれます。

[...]
@pytest.fixture
def mock_sqlite_connect(monkeypatch):
    """
    Patch sqlite3.connect to return a MagicMock connection + cursor.
[...]
開発者のための AI 支援コーディング

セキュリティを意識したプロンプト

☺ 通常のプロンプト

$$

以下のPython関数に潜在的な脆弱性がないかスキャンし、問題があればより安全な代替案を提案してください。

🤓 テスト駆動プロンプト

$$

このコードをSQLインジェクション、XSS、入力バリデーションの欠陥など、一般的なWebセキュリティの問題についてレビューしてください。

開発者のための AI 支援コーディング

OWASP Top 10

owasp_top_10.png

開発者のための AI 支援コーディング

OWASP Top 10

  • ユーザープロンプト: 以下の関数をOWASP Top 10の脆弱性についてレビューしてください。
def login(username, password):
   query = f"SELECT * FROM users WHERE username = '{username}' \
           AND password = '{password}'"
   result = db.execute(query)
   return result.fetchone()
  • モデルの回答:

login関数のOWASP Top 10に基づく診断と、より安全な書き直しを示します。

  1. A03: インジェクション。SQLへの文字列直接補間により、SQLインジェクションが容易に可能です。攻撃例:
    • username = "admin' --" → パスワードチェックをバイパス。[...]
開発者のための AI 支援コーディング

練習しましょう!

開発者のための AI 支援コーディング

Preparing Video For Download...