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 函数?
- 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)
它会删除任何非(英文)字母、数字、下划线、简单连字符或句号的内容。基于以下答案:
我认为这将涵盖我的用例,但我不知道是否存在可能造成伤害的危险极端情况。作为记录,运行正在执行这些查询的用户只有读取权限。但是,我宁愿不依赖这个事实。也许将来有人会授予用户更高的权限。
我认为这会很安全,但我应该做点别的吗?这感觉就像是人们会告诉我不要 运行 我自己的东西的情况之一,比如加密和散列。
有 open issue in the project for PEP 249 合规性,github returns 上的回购搜索没有 paramstyle
,所以现在可能没有正确的方法。
InfluxDB python 客户端是否有以 SQL 注入安全方式使用参数的正确方法,很像 psycopg 中的 mogrify 函数?
- 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)
它会删除任何非(英文)字母、数字、下划线、简单连字符或句号的内容。基于以下答案:
我认为这将涵盖我的用例,但我不知道是否存在可能造成伤害的危险极端情况。作为记录,运行正在执行这些查询的用户只有读取权限。但是,我宁愿不依赖这个事实。也许将来有人会授予用户更高的权限。
我认为这会很安全,但我应该做点别的吗?这感觉就像是人们会告诉我不要 运行 我自己的东西的情况之一,比如加密和散列。
有 open issue in the project for PEP 249 合规性,github returns 上的回购搜索没有 paramstyle
,所以现在可能没有正确的方法。