開始使用免費開始

為使用者輸入選擇安全的作法

某個 pipeline 會從使用者設定接收產品名稱,來篩選一段 SQL 查詢。你的同事提出兩種作法:

作法 A 使用 params(Jinja 渲染):

SQLExecuteQueryOperator(
    sql="SELECT * FROM orders WHERE product = '{{ params.product }}'",
    params={"product": user_input},
)

作法 B 使用 parameters(資料庫層級繫結):

SQLExecuteQueryOperator(
    sql="SELECT * FROM orders WHERE product = $product",
    parameters={"product": user_input},
)

當產品名稱來自不受信任的使用者輸入時,哪一個作法具有注入安全性(injection-safe)?

本練習屬於課程

使用 Airflow 建置資料管線

檢視課程

動手互動練習

將理論付諸實踐,立即體驗我們的互動練習

開始練習