Existe-t-il une manière correcte d'utiliser des paramètres de manière sécurisée par injection SQL avec le client InfluxDB python, un peu comme la fonction mogrify dans psycopg?Existe-t-il une manière correcte d'utiliser les paramètres d'une manière sécurisée par injection SQL avec le client python InfluxDB, un peu comme la fonction mogrify dans psycopg?
- https://github.com/influxdata/influxdb-python/
- http://initd.org/psycopg/docs/cursor.html#cursor.mogrify
Voici semble assez dangereux:
def mogrify(query, params):
return query % tuple(params)
si quelque chose comme cela a été fait:
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
(Je ne sais pas si cela fonctionne réellement, mais vous obtenez le point.)
Actuellement J'envisage une solution simple en interne:
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)
Il enlève tout ce qui est pas (en anglais) lettre, nombre, trait de soulignement, tiret simple ou point. Basé sur la réponse suivante: https://stackoverflow.com/a/5843560/604048
Je pense que cela couvrira mes cas d'utilisation, mais je ne sais pas s'il y a des cas de coin dangereux qui permettent de faire du mal. Pour l'enregistrement, l'utilisateur qui exécute ces requêtes n'a qu'un accès en lecture. Cependant, je préfère ne pas me fier à ce fait. Peut-être que quelqu'un pourrait donner à l'utilisateur des droits élevés à l'avenir. Je pense que ce sera sûr, mais devrais-je faire quelque chose d'autre? Cela ressemble plutôt à l'un de ces cas où les gens vont me dire de ne pas gérer mon propre truc, comme avec le cryptage et le hachage.