InfluxDB python 客户端是否有以 SQL 注入安全方式使用参数的正确方法,很像 psycopg 中的 mogrify 函数?

Is there a correct way to use parameters in a SQL injection safe way with the InfluxDB python client, much like the mogrify function in psycopg?

InfluxDB python 客户端是否有以 SQL 注入安全方式使用参数的正确方法,很像 psycopg 中的 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)

它会删除任何非(英文)字母、数字、下划线、简单连字符或句号的内容。基于以下答案:

我认为这将涵盖我的用例,但我不知道是否存在可能造成伤害的危险极端情况。作为记录,运行正在执行这些查询的用户只有读取权限。但是,我宁愿不依赖这个事实。也许将来有人会授予用户更高的权限。

我认为这会很安全,但我应该做点别的吗?这感觉就像是人们会告诉我不要 运行 我自己的东西的情况之一,比如加密和散列。

open issue in the project for PEP 249 合规性,github returns 上的回购搜索没有 paramstyle,所以现在可能没有正确的方法。