用 AI 撰寫測試與強化程式安全

AI-Assisted Coding for Developers

Francesca Donadoni

AI Curriculum Manager, DataCamp

測試驅動提示

☺ 一般提示

撰寫一個 Python 函式,用來解析電子郵件位址。

🤓 測試驅動提示

撰寫一個 Python 函式,用來解析電子郵件位址。它應通過以下測試:

  • 接受像「[email protected]」這樣的有效位址。
  • 拒絕像「user@@domain」這種無效輸入。
  • 針對空輸入拋出 ValueError。
AI-Assisted Coding for Developers

測試驅動提示

  • User prompt: 為一個處理使用者提交表單資料並寫入 SQL 資料庫的函式,產生 Python 單元測試。

  • Model response:

這是一份可直接執行的 pytest 測試,涵蓋驗證、正規化、SQL 注入防護,以及交易行為,針對會處理表單資料並寫入 SQL 資料庫的函式。

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

@pytest.fixture()
def conn():
    """In-memory SQLite DB with a users table."""
    c = sqlite3.connect(":memory:") [...]
AI-Assisted Coding for Developers

測試驅動提示

  • User prompt: 使用 pytest 為下列函式產生 Python 單元測試。包含空輸入、輸入含 SQL 關鍵字與特殊字元的案例。假設使用模擬的資料庫連線。 <INSERT FUNCTION>

  • Model response:

這是一個自含的 pytest 測試模組,使用 mock(無真實 DB),涵蓋空輸入、SQL 關鍵字與特殊字元,也檢查 commit/close 行為及例外是否被吞掉。

[...]
@pytest.fixture
def mock_sqlite_connect(monkeypatch):
    """
    Patch sqlite3.connect to return a MagicMock connection + cursor.
[...]
AI-Assisted Coding for Developers

安全性提示

☺ 一般提示

$$

掃描下列 Python 函式,找出潛在弱點,若有請提出更安全的替代作法。

🤓 測試驅動提示

$$

檢視此程式碼的常見網頁安全問題,包括 SQL 注入、XSS,以及輸入驗證缺陷。

AI-Assisted Coding for Developers

OWASP 前 10 名

OWASP 前 10 名

AI-Assisted Coding for Developers

OWASP 前 10 名

  • User prompt: 依據 OWASP 前 10 名,稽核下列函式。
def login(username, password):
   query = f"SELECT * FROM users WHERE username = '{username}' \
           AND password = '{password}'"
   result = db.execute(query)
   return result.fetchone()
  • Model response:

以下是針對你的登入函式所做的精要 OWASP 前 10 名稽核,並附更安全的改寫。

  1. A03:注入。直接把字串插入 SQL,極易被 SQL 注入。範例 payload:
    • username = "admin' --" → 會略過密碼檢查。[...]
AI-Assisted Coding for Developers

一起來練習吧!

AI-Assisted Coding for Developers

Preparing Video For Download...