Psaní testů a zabezpečení kódu s AI

AI-Assisted Coding for Developers

Francesca Donadoni

AI Curriculum Manager, DataCamp

Promptování řízené testy

☺ Běžné promptování

Napiš funkci v Pythonu pro parsování e-mailových adres.

🤓 Promptování řízené testy

Napiš funkci v Pythonu pro parsování e-mailových adres. Musí projít těmito testy:

  • Přijme platnou adresu jako „[email protected]“.
  • Odmítne neplatný vstup jako „user@@domain“.
  • Vyvolá ValueError při prázdném vstupu.
AI-Assisted Coding for Developers

Promptování řízené testy

  • Prompt uživatele: Vygeneruj v Pythonu unit testy pro funkci, která zpracovává data z formuláře a vkládá je do SQL databáze.

  • Odpověď modelu:

Zde je hotová sada testů pro pytest pokrývající validaci, normalizaci, ochranu proti SQL injection a chování transakcí pro funkci, která zpracovává data z formuláře a vloží záznam do SQL databáze.

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

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

Promptování řízené testy

  • Prompt uživatele: Vygeneruj v Pythonu unit testy pomocí pytest pro následující funkci. Zahrň případy prázdného vstupu, SQL klíčových slov ve vstupu a speciálních znaků. Předpokládej mock databázové připojení. <INSERT FUNCTION>

  • Odpověď modelu:

Zde je samostatný testovací modul pro pytest, který používá mocky (bez reálné DB) a pokrývá prázdný vstup, SQL klíčová slova a speciální znaky. Ověřuje také chování commit/close a zachycení výjimek.

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

Promptování pro bezpečnost

☺ Běžné promptování

$$

Prohlédni následující funkci v Pythonu kvůli možným zranitelnostem a navrhni bezpečnější alternativy, pokud nějaké najdeš.

🤓 Promptování řízené testy

$$

Zkontroluj tento kód kvůli běžným bezpečnostním problémům webu, včetně SQL injection, XSS a chyb ve validaci vstupu.

AI-Assisted Coding for Developers

OWASP Top 10

owasp_top_10.png

AI-Assisted Coding for Developers

OWASP Top 10

  • Prompt uživatele: Proveď audit následující funkce z hlediska zranitelností 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()
  • Odpověď modelu:

Zde je cílený audit OWASP Top 10 vaší funkce login a bezpečnější přepis.

  1. A03: Injection. Přímé vkládání řetězce do SQL činí kód triviálně zranitelným vůči SQL injection. Příklady payloadů:
    • username = "admin' --" → obejde kontrolu hesla. [...]
AI-Assisted Coding for Developers

Pojďme si to vyzkoušet!

AI-Assisted Coding for Developers

Preparing Video For Download...