插件开发
已解决
请教:插件里如何安全地执行用户输入的 SQL 片段?
管
管理员
提问于 2026-08-06 20:52
989 浏览
11 回复
业务上需要支持运营配置一段 SQL 做自定义报表,但又怕被注入。除了参数绑定之外还有什么最佳实践?
官方已跟进 · 状态:【已解决】
林
林一舟
达人
已采纳
2026-09-14 11:05
这个坑我踩过。根因是:开启 Schema 缓存后,Yii 把表的字段类型信息一并缓存,而插件上传组件在构造 OSS 分片上传参数时用 $schema->getColumnType() 判断附件表字段,缓存里 varchar 长度信息丢失导致签名串里文件大小字段为空,STS 签名校验失败返回 403。
提问者已采纳 · 悬赏 100 积分已发放
风
风间
2026-09-14 14:02
同踩过这个坑,当时排查了半天才发现是 Schema 缓存,太隐蔽了。
白
白鸦
楼主
2026-09-14 14:15
回复 @风间:是的,已按 1 楼方案分离 schemaCache,20MB 上传验证通过
风
风间
2026-09-14 13:48
补充一个排查思路:遇到 OSS 403 先看响应头里的 X-Oss-Request-ID,拿去 OSS 控制台的日志查询里能直接定位到是签名错还是权限错,比盲猜快很多。
白
白鸦
楼主
2026-09-14 15:20
按 1 楼方案改了 schemaCache 分离,20MB 上传也通过了,问题解决 感谢!已采纳并发放悬赏。总结一句:开启 DB_ENABLE_SCHEMA_CACHE 的环境务必把 schemaCache 和业务 cache 分开配置。