不能够在databricks-sql Connector中的添加列命令中传递列名(需要解决SQL注入SNYK漏洞)

问题描述 投票:0回答:1
def add_config(self, user_name, action, schema_name, table_name, field_names, field_datatypes): alter_query = "ALTER TABLE IDENTIFIER(:sch || '.' || :tab) ADD COLUMNS ({})".format(columns_str) cursor.execute(alter_query, {'sch': schema_name,'tab': table_name}) self.conn.commit()

我还实施了一个基本的输入检查,以找到安全标识符:

def is_safe_identifier(self, identifier): return re.match(r'^[a-zA-Z0-9_]+$', identifier) is not None

这是为了确保HTTP参数的输入疗法。
如何修改代码以实现SQL注入,同时还可以实现该功能(动态添加列)?除了格式字符串之外,无法想到其他方法。

如果您仅接受匹配白名单的字符串,则您的代码不容易受到SQL注入攻击的影响。这也是对列名称的非常合理的限制(尽管我会更加严格并说
'^[a-zA-Z0-9_]+$'
)。

所以问题是我们如何

(1)确保查询中的动态字符串实际上还可以满足该标准的未来,也是如此

(2)使Snyk不报告此假阳性
python databricks sql-injection databricks-sql database-security
1个回答
0
投票
https://docs.snyk.io/manage-risk/prioritize-issues-issues-issues-for-for-for-for-fixing/ignore-issues-

现在我希望Snyk提供某种方法,以某种方式将价值标记为“安全”,但我没有发现。如果添加它,那将是可取的。但实际上,我会告诉Snyk忽略这个问题。

我还建议,不用具有“检查”功能返回布尔值,而是具有验证功能,以返回其成功验证的论点。然后,您可以在字符串征收中使用返回的结果。这使您的代码更加安全地相对于将来的重构。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.