為使用者輸入選擇安全的作法
某個 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)?
本練習屬於課程
