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不报告此假阳性
现在我希望Snyk提供某种方法,以某种方式将价值标记为“安全”,但我没有发现。如果添加它,那将是可取的。但实际上,我会告诉Snyk忽略这个问题。
我还建议,不用具有“检查”功能返回布尔值,而是具有验证功能,以返回其成功验证的论点。然后,您可以在字符串征收中使用返回的结果。这使您的代码更加安全地相对于将来的重构。