fix: harden dashboard security boundaries

This commit is contained in:
naiba committed 2026-10-01 04:28:34 +00:00
1 parent c726930833
commit 36b742a7e9
12 files changed
+357 -46

No files matched your search

+12 -13
View File
@@ -236,10 +236,9 @@ func getServerConfig(c *gin.Context) (string, error) {
}
s, ok := singleton.ServerShared.Get(id)
if !ok {
return "", nil
}
if !s.HasPermission(c) {
// Foreign and unknown IDs deliberately share one response so sequential
// server IDs cannot be enumerated across tenants.
if !ok || !s.HasPermission(c) || !patAllowsServer(c, id) {
return "", singleton.Localizer.ErrorT("permission denied")
}
if s.GetTaskStream() == nil {
@@ -293,16 +292,16 @@ func setServerConfig(c *gin.Context) (*model.ServerTaskResponse, error) {
slist := singleton.ServerShared.GetList()
servers := make([]*model.Server, 0, len(configForm.Servers))
for _, sid := range configForm.Servers {
if s, ok := slist[sid]; ok {
if !s.HasPermission(c) {
return nil, singleton.Localizer.ErrorT("permission denied")
}
if s.GetTaskStream() == nil {
resp.Offline = append(resp.Offline, s.ID)
continue
}
servers = append(servers, s)
s, ok := slist[sid]
// Match getServerConfig: do not reveal whether a denied ID exists.
if !ok || !s.HasPermission(c) || !patAllowsServer(c, sid) {
return nil, singleton.Localizer.ErrorT("permission denied")
}
if s.GetTaskStream() == nil {
resp.Offline = append(resp.Offline, s.ID)
continue
}
servers = append(servers, s)
}
var wg sync.WaitGroup