Chọn cách an toàn khi nhận đầu vào từ người dùng
Một pipeline nhận tên sản phẩm từ cấu hình do người dùng cung cấp để lọc một truy vấn SQL. Đồng nghiệp của bạn đề xuất hai cách:
Cách A dùng params (Jinja rendering):
SQLExecuteQueryOperator(
sql="SELECT * FROM orders WHERE product = '{{ params.product }}'",
params={"product": user_input},
)
Cách B dùng parameters (ràng buộc ở mức DB):
SQLExecuteQueryOperator(
sql="SELECT * FROM orders WHERE product = $product",
parameters={"product": user_input},
)
Cách nào an toàn trước tấn công chèn lệnh (injection-safe) khi tên sản phẩm đến từ nguồn người dùng không đáng tin cậy?
Bài tập này là một phần của khóa học
Xây dựng Data Pipeline với Airflow
Bài tập tương tác thực hành
Biến lý thuyết thành hành động với một trong các bài tập tương tác của chúng tôi
Bắt đầu bài tập