CS KAIROS · LEARNING LIBRARY

M15 · SQL 注入 · 安全練習

本章只使用離線資料、自製輸入或紙上情境。依下列步驟完成,再核對自己留下的證據。

離線練習:記憶體資料庫查詢

本機 Python 3 與 sqlite3 標準模組;不建立磁碟資料庫、不連線,也不使用真實個資。

  1. 閱讀下方程式,找出固定 SQL 與綁定值的位置。
  2. 在本機執行,核對輸出。
  3. 把查詢值改成不存在的名稱,預期空清單。
import sqlite3
con = sqlite3.connect(":memory:")
try:
    con.execute("CREATE TABLE people (name TEXT)")
    con.execute("INSERT INTO people VALUES (?)", ("O'Neil",))
    print(con.execute("SELECT name FROM people WHERE name = ?", ("O'Neil",)).fetchall())
finally:
    con.close()

預期結果

第一次輸出 [("O'Neil",)];查詢不存在名稱時輸出 []。

自行檢核

如果改用參數作資料表名稱,為什麼不是同一種綁定問題?

結束與清理

程式結束即關閉記憶體資料庫,不留下資料檔。