Выбор безопасного подхода для пользовательского ввода
Пайплайн принимает название продукта из пользовательской конфигурации, чтобы отфильтровать 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},
)
Какой подход защищён от SQL-инъекций, если название продукта поступает из ненадёжного пользовательского ввода?
Это упражнение является частью курса
Построение пайплайнов данных с Airflow
Практическое интерактивное упражнение
Превратите теорию в практику с помощью одного из наших интерактивных упражнений
Начать упражнение