为用户输入选择安全的方法
某条管道需要从用户配置中接收一个产品名称,用于筛选 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},
)
当产品名称来自不受信任的用户输入时,哪种方法是注入安全的?
本练习是课程的一部分
