Есть ли правильный способ использования параметров в безопасном режиме SQL-инъекции с помощью клиента python InfluxDB, подобно функции mogrify в psycopg?Есть ли правильный способ использовать параметры в безопасном режиме SQL-инъекции с помощью клиента python InfluxDB, подобно функции mogrify в psycopg?
- https://github.com/influxdata/influxdb-python/
- http://initd.org/psycopg/docs/cursor.html#cursor.mogrify
Следующая представляется весьма опасным:
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
Я думаю, что это будет охватывать мои прецеденты, но я понятия не имею, есть ли опасные угловые шкафы, которые позволяют нанести вред. Для записи пользователь, выполняющий эти запросы, имеет доступ только для чтения. Однако я бы предпочел не полагаться на этот факт. Возможно, кто-то может дать пользователю повышенные права в будущем.
Я думаю, это будет безопасно, но должен ли я делать что-то еще? Это скорее похоже на один из тех случаев, когда люди будут говорить мне не запускать мою собственную вещь, например, с помощью шифрования и хэширования.