Przeglądaj źródła

fix(admin): 修复 WAF 日志中数据提取和类型转换的安全性

- 通过创建 extraData 变量安全地提取和处理数据
- 添加类型断言检查,提高代码的健壮性和安全性
- 优化了对后端列表的解析逻辑
- 改进了对端口、域名等信息的提取方式
fusu 4 dni temu
rodzic
commit
f6e5c00fe2
1 zmienionych plików z 41 dodań i 21 usunięć
  1. 41 21
      internal/service/admin/waflog.go

+ 41 - 21
internal/service/admin/waflog.go

@@ -507,36 +507,56 @@ func (s *wafLogService) convertRawDataToExportResults(ctx context.Context, rawDa
 		}
 
 		if strings.Contains(v.ApiName, "tcp") || strings.Contains(v.ApiName, "udp") || strings.Contains(v.ApiName, "web") {
-			if mapData["port"] != nil {
-				port = mapData["port"].(string)
-			}
-			if mapData["domain"] != nil {
-				domain = mapData["domain"].(string)
+			// 安全地获取extraData
+			var extraData map[string]interface{}
+			if mapData["data"] != nil {
+				if data, ok := mapData["data"].(map[string]interface{}); ok {
+					extraData = data
+				}
 			}
-			if mapData["backend_list"] != nil {
-				if strings.Contains(v.ApiName, "web") {
-					var backendList []map[string]interface{}
-					err := json.Unmarshal([]byte(mapData["backend_list"].(string)), &backendList)
-					if err != nil {
-						s.Logger.Error("解析后端列表失败", zap.Error(err))
-						continue
+			
+			if extraData != nil {
+				if extraData["port"] != nil {
+					if portStr, ok := extraData["port"].(string); ok {
+						port = portStr
 					}
-					for _, backend := range backendList {
-						if backend["addr"] != nil {
-							AddrBackendList = backend["addr"]
-						}
-						if backend["customHost"] != nil {
-							customHost = backend["customHost"].(string)
+				}
+				if extraData["domain"] != nil {
+					if domainStr, ok := extraData["domain"].(string); ok {
+						domain = domainStr
+					}
+				}
+				if extraData["backend_list"] != nil {
+					if strings.Contains(v.ApiName, "web") {
+						if backendListStr, ok := extraData["backend_list"].(string); ok {
+							var backendList []map[string]interface{}
+							err := json.Unmarshal([]byte(backendListStr), &backendList)
+							if err != nil {
+								s.Logger.Error("解析后端列表失败", zap.Error(err))
+								continue
+							}
+							for _, backend := range backendList {
+								if backend["addr"] != nil {
+									AddrBackendList = backend["addr"]
+								}
+								if backend["customHost"] != nil {
+									if customHostStr, ok := backend["customHost"].(string); ok {
+										customHost = customHostStr
+									}
+								}
+							}
 						}
+					} else {
+						AddrBackendList = extraData["backend_list"]
 					}
-				} else {
-					AddrBackendList = mapData["backend_list"]
 				}
 			}
 		}
 
 		if mapData["comment"] != nil {
-			comment = mapData["comment"].(string)
+			if commentStr, ok := mapData["comment"].(string); ok {
+				comment = commentStr
+			}
 		}
 
 		// 优化:从批量获取的网关组数据中查找