diff --git a/internal/app/httpserver/router.go b/internal/app/httpserver/router.go index a5205d86..555331fb 100644 --- a/internal/app/httpserver/router.go +++ b/internal/app/httpserver/router.go @@ -246,13 +246,14 @@ func SetupRouter(cfg *config.Config, c *container.Container) *gin.Engine { r.Use(middleware.CallbackRouteMiddleware(c.SettingService, paymentCallbackHandler, paymentWebhookHandler, upstreamHandler)) // 静态文件服务(上传的图片)必须放在前面。 - // SVG 强制下载并禁止脚本:即使上传校验被绕过,直接打开 /uploads/x.svg 也不会在站点源下执行脚本; - // 引用不受 Content-Disposition 影响,正常显示。 + // 所有上传文件一律禁止脚本:即使上传校验被绕过(如 telegram 场景不限扩展名、上游图片), + // 直接打开 /uploads/x.html 也不会在站点源下执行脚本; 引用不受影响。 + // SVG 额外强制下载。 r.Group("/uploads", func(c *gin.Context) { + c.Header("Content-Security-Policy", "sandbox; script-src 'none'") + c.Header("X-Content-Type-Options", "nosniff") if strings.EqualFold(path.Ext(c.Request.URL.Path), ".svg") { c.Header("Content-Disposition", "attachment") - c.Header("Content-Security-Policy", "sandbox; script-src 'none'") - c.Header("X-Content-Type-Options", "nosniff") } }).Static("/", "./uploads")