Существует ли правильный способ безопасного использования параметров с помощью SQL-инъекции с помощью Python-клиента InfluxDB, очень похожий на функцию mogrify в psycopg?

Существует ли правильный способ безопасного использования параметров с помощью SQL-инъекции с помощью Python-клиента InfluxDB, очень похожий на функцию mogrify в psycopg?

Следующее кажется довольно опасным:

def mogrify(query, params):
    return query % tuple(params)

Что, если что-то подобное было сделано:

query = """ SELECT foo FROM bar WHERE baz = %s AND bat = %s """
params = ('safe_param', 'not_so_safe_param; DROP MEASUREMENT bar;')
result_set = client.query(mogrify(query, params))
return result_set 

(Не уверен, что это действительно сработает, но вы понимаете, в чем дело)

В настоящее время я рассматриваю простое собственное решение:

def mogrify(query, params):
    clean_params = list()

    for param in params:
        param = ''.join(char for char in param if char.isalnum() or char in ('-', '_', '.'))
        clean_params.append(param)

    return query % tuple(clean_params)

Он удаляет все, что не является (английской) буквой, числом, подчеркиванием, простым дефисом или точкой. Основано на следующем ответе: /questions/21455227/udalit-vse-spetsialnyie-simvolyi-znaki-prepinaniya-i-probelyi-iz-stroki/21455248#21455248

Я думаю, что это покроет мои варианты использования, но я понятия не имею, существуют ли опасные угловые случаи, которые позволяют причинить вред. Для записи, пользователь, который выполняет эти запросы, имеет только доступ на чтение. Однако я бы предпочел не полагаться на этот факт. Может быть, кто-то может дать пользователю повышенные права в будущем.

Я думаю, что это будет безопасно, но я должен делать что-то еще? Это скорее похоже на один из тех случаев, когда люди будут говорить мне не запускать мою собственную вещь, как с шифрованием и хэшированием.

1 ответ

Решение

В проекте существует открытый вопрос соответствия PEP 249, и поиск репо на github ничего не дает paramstyleтак что, вероятно, сейчас нет правильного пути.

Другие вопросы по тегам