Zacznij terazZacznij za darmo

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

Zobacz kurs

Interaktywne ćwiczenie praktyczne

Przekształć teorię w praktykę dzięki jednemu z naszych interaktywnych ćwiczeń

Rozpocznij ćwiczenie