Wybór bezpiecznego podejścia dla danych od użytkownika
Potok przyjmuje nazwę produktu z konfiguracji użytkownika, aby przefiltrować zapytanie SQL. Twój kolega proponuje dwa podejścia:
Podejście A używa params (renderowanie Jinja):
SQLExecuteQueryOperator(
sql="SELECT * FROM orders WHERE product = '{{ params.product }}'",
params={"product": user_input},
)
Podejście B używa parameters (wiązanie na poziomie bazy danych):
SQLExecuteQueryOperator(
sql="SELECT * FROM orders WHERE product = $product",
parameters={"product": user_input},
)
Które podejście jest bezpieczne pod kątem wstrzyknięć SQL, gdy nazwa produktu pochodzi z niezaufanych danych od użytkownika?
To ćwiczenie jest częścią kursu
Budowanie potoków danych z Airflow
Interaktywne ćwiczenie praktyczne
Przekształć teorię w praktykę dzięki jednemu z naszych interaktywnych ćwiczeń
Rozpocznij ćwiczenie