如何在Snowflake Filter函数及DRF视图代码中防范SQL注入风险?
防范DRF视图中Snowflake查询的SQL注入风险
你当前使用Snowflake Python SDK的filter搭配col()的写法,本身已经通过参数化查询机制规避了大部分SQL注入风险,但仍有几个关键细节需要完善,确保完全安全:
严格校验输入类型与格式
entity_id来自DRF路由的pk参数,先做类型校验(比如ID是整数的话),提前拦截非法输入:from rest_framework.exceptions import ValidationError try: entity_id = int(kwargs['pk']) except ValueError: raise ValidationError("无效的ID格式")杜绝字符串拼接式查询
绝对不要直接将用户输入拼接进SQL语句或表名、字段名中,比如下面这种写法是高危的:# 危险!存在SQL注入风险 table = session.sql(f"SELECT * FROM my_table WHERE {ID_COL} = {entity_id}")坚持使用SDK封装的
filter、col()这类API,它们会自动将用户输入作为参数绑定到查询中,而非直接嵌入SQL文本。限制数据库账号权限
给连接Snowflake的业务账号配置最小权限:仅允许查询my_table,禁止执行DDL、访问其他表或执行敏感操作。即使出现意外注入,也能最大程度降低危害范围。利用DRF的输入验证机制
在DRF的视图或序列化器中对pk字段做验证,比如使用IntegerField指定类型,或者自定义验证逻辑,在进入数据库查询环节前就拦截非法输入。
内容的提问来源于stack exchange,提问作者LiorA
相关产品推荐
相关产品推荐

