From 19585af99f48080b0ebce854c5b339b23873ae74 Mon Sep 17 00:00:00 2001 From: yaodeshun Date: Tue, 14 Oct 2025 10:45:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eonlyword=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package/gamelog/sdk.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/package/gamelog/sdk.go b/package/gamelog/sdk.go index be77f94..b3283b9 100644 --- a/package/gamelog/sdk.go +++ b/package/gamelog/sdk.go @@ -68,17 +68,29 @@ var ( ) -var safePropertyRE = regexp.MustCompile( - `["'\\\/\s]` + - `|\\[tnrfbv\\]` + // 转义字面量 - `|[\x00-\x1F\x7F-\x9F]` + // ASCII + C1 控制字符 - `|[\\u200B-\\u200D\\uFEFF]`, // 零宽字符 -) +var safePropertyRE = regexp.MustCompile(`[/"'\\\/]`) + +// 设置某些字段只允许包含字母、数字和下划线 +var onlyWordRE = regexp.MustCompile(`\W`) +var onlyWordPropertyNames = map[string]struct{}{ + "nickname": {}, +} + +func SetOnlyWordProperty(propertyNames ...string) { + for _, propertyName := range propertyNames { + onlyWordPropertyNames[propertyName] = struct{}{} + } +} func safeProperty(property map[string]any) { for k, v := range property { - if _, ok := v.(string); ok { + if _, ok := onlyWordPropertyNames[k]; ok { + if _, ok := v.(string); ok { + property[k] = onlyWordRE.ReplaceAllString(gconv.String(v), "_") + } + } else { property[k] = safePropertyRE.ReplaceAllString(gconv.String(v), "*") + } } }