2017-01-02 1 views
2

Есть ли правильный способ использования параметров в безопасном режиме 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) 

Он удаляет все, что не является (на английском языке) буква, число, символ подчеркивания, простой дефис или период. На основании следующего ответа: https://stackoverflow.com/a/5843560/604048

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

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

ответ

2

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

Смежные вопросы