使用 AI 编写测试并加固代码

面向开发者的 AI 辅助编码

Francesca Donadoni

AI Curriculum Manager, DataCamp

测试驱动提示

☺ 普通提示

编写一个 Python 函数来解析电子邮箱地址。

🤓 测试驱动提示

编写一个 Python 函数来解析电子邮箱地址。其应通过以下测试:

  • 接受有效地址,如 "[email protected]"。
  • 拒绝无效输入,如 "user@@domain"。
  • 为空输入时抛出 ValueError。
面向开发者的 AI 辅助编码

测试驱动提示

  • 用户提示: 为一个处理用户提交的表单数据并插入 SQL 数据库的函数生成 Python 单元测试。

  • 模型回复:

以下是可直接运行的 pytest 测试套件,覆盖校验、规范化、SQL 注入安全与事务行为,针对处理表单并插入记录的函数。

[...]
# ---------- 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>

  • 模型回复:

以下是一个自包含的 pytest 测试模块,使用 mock(无真实 DB),覆盖空输入、SQL 关键字与特殊字符。还验证了提交/关闭行为,并确认异常被吞掉。

[...]
@pytest.fixture
def mock_sqlite_connect(monkeypatch):
    """
    Patch sqlite3.connect to return a MagicMock connection + cursor.
[...]
面向开发者的 AI 辅助编码

面向安全的提示

☺ 普通提示

$$

扫描下列 Python 函数的潜在漏洞,并在发现时给出更安全的替代方案。

🤓 测试驱动提示

$$

审查此代码中的常见 Web 安全问题,包括 SQL 注入、XSS 和输入验证缺陷。

面向开发者的 AI 辅助编码

OWASP Top 10

OWASP Top 10 图示

面向开发者的 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()
  • 模型回复:

以下是对该登录函数的聚焦式 OWASP Top 10 审计,以及更安全的改写。

  1. A03:注入。直接将字符串插入 SQL,极易被 SQL 注入。示例载荷:
    • username = "admin' --" → 绕过密码校验。[...]
面向开发者的 AI 辅助编码

让我们来练习!

面向开发者的 AI 辅助编码

Preparing Video For Download...