安全防护方案
针对数据库查询插件的SQL注入风险,需采取多层防御措施:
- 基础防护层
- 使用参数化查询(Prepared Statements)替代字符串拼接
- 配置
sql_safe_updates=ON
禁止全表操作
- 输入验证层
- 在Dify工作流前置「参数校验」节点,使用正则表达式验证:
^[a-zA-Z0-9_]{1,20}$
(字段名)^d{4}-d{2}-d{2}$
(日期)
- 在Dify工作流前置「参数校验」节点,使用正则表达式验证:
- 运行时防护
- 启用数据库的
max_execution_time
限制 - 配置查询白名单(仅允许预定义的10个查询模板)
- 启用数据库的
- 监控预警
- 设置
log_queries_not_using_indexes=ON
- 对接SIEM系统监控异常查询模式
- 设置
补充建议:每月使用SQLMap等工具进行渗透测试,对于金融等高危场景推荐使用ClickHouse的max_query_size参数限制查询复杂度。
本答案来源于文章《支持数据库查询的Dify插件》