2017-01-02 2 views
2

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?

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.

Répondre

2

Il ya un open issue dans le projet pour la conformité PEP 249, et une recherche de la repo sur github ne renvoie rien pour paramstyle, donc probablement il n'y a pas de manière correcte en ce moment.