SQL-инъекция второго порядка
def find_or_create_bp(bp_metadata):
"""
Returns a BusinessProcess, creating a new one if not found.
"""
bp_id = bp_metadata\['id'\]
bp_name = bp_metadata\['name'\]
bp_matches = BusinessProcess.objects.filter(
bp_id=bp_id,
bp_name=bp_name
).order_by('-id')
if bp_matches:
bp = bp_matches[0]
else:
bp = BusinessProcess(
bp_id=bp_id,
bp_name=bp_name
)
bp.save()
print("BusinessProcess created: " + bp_name)
return bp
Метод find_or_create_bp в строке 42 из project/api/src/monitoring_backend/monitoring_app/management/commands/migrate_watchitemconfigs.py получает данные базы данных из элемента фильтра. Затем значение этого элемента проходит через код, не будучи и в конечном итоге используется в запросе к базе данных в методе find_or_create_step в строке 64. строка 64 из project/api/src/monitoring_backend/monitoring_app/management/commands/migrate_watchitemconfigs.py. Это может привести к атаке SQL Injection второго порядка.