diff --git a/GameFrameX.Network.HTTP/BaseHttpHandler.cs b/GameFrameX.Network.HTTP/BaseHttpHandler.cs index e411fb213..f393977fa 100644 --- a/GameFrameX.Network.HTTP/BaseHttpHandler.cs +++ b/GameFrameX.Network.HTTP/BaseHttpHandler.cs @@ -248,12 +248,7 @@ public bool CheckSign(string command, Dictionary paramMap, out s } // 弱密钥一次性告警(不阻断请求,fail-closed 只防“空”,告警提示“弱”) - if (secret.Length < SignSecretMinimumLength && !_weakSecretWarningLogged) - { - _weakSecretWarningLogged = true; - // Localization: Network.Http.SignSecretTooWeak - HttpSignSecret 长度不足 {0} 字符,存在被离线爆破风险,请更换为高强度随机密钥 - LogHelper.Warning(LocalizationService.GetString(Localization.Keys.NetworkHttp.SignSecretTooWeak, SignSecretMinimumLength)); - } + WarnWeakSecretOnce(secret); var sign = paramMap[GlobalConst.HttpSignKey].ToString(); var time = paramMap[GlobalConst.HttpTimestampKey].ToString(); @@ -280,12 +275,7 @@ public bool CheckSign(string command, Dictionary paramMap, out s return CheckSignVersionTwo(command, paramMap, secret, sign, time, out error); } - if (!_signVersionOneDeprecatedWarningLogged) - { - _signVersionOneDeprecatedWarningLogged = true; - // Localization: Network.Http.SignVersionOneDeprecated - HTTP 签名仍使用 v1(仅时间戳)旧口径,不防篡改与重放,建议尽快迁移到 HttpSignVersion=2 - LogHelper.Warning(LocalizationService.GetString(Localization.Keys.NetworkHttp.SignVersionOneDeprecated)); - } + WarnSignVersionOneDeprecatedOnce(); if (HmacSha256Helper.Verify(time, secret, sign)) { @@ -359,4 +349,37 @@ private static void CleanupExpiredNonces(long nowUnixSeconds) } } } + + /// + /// 弱密钥一次性告警(静态方法内写静态标记,满足 S2696;并发下最多多打一条告警,无害)。 + /// + /// + /// Logs the weak-secret warning once; the static flag is only set inside this static method. + /// + /// 当前签名密钥 / The current signing secret + private static void WarnWeakSecretOnce(string secret) + { + if (secret.Length < SignSecretMinimumLength && !_weakSecretWarningLogged) + { + _weakSecretWarningLogged = true; + // Localization: Network.Http.SignSecretTooWeak - HttpSignSecret 长度不足 {0} 字符,存在被离线爆破风险,请更换为高强度随机密钥 + LogHelper.Warning(LocalizationService.GetString(Localization.Keys.NetworkHttp.SignSecretTooWeak, SignSecretMinimumLength)); + } + } + + /// + /// v1 签名口径弃用一次性告警(静态方法内写静态标记,满足 S2696)。 + /// + /// + /// Logs the deprecated-signature-v1 warning once; the static flag is only set inside this static method. + /// + private static void WarnSignVersionOneDeprecatedOnce() + { + if (!_signVersionOneDeprecatedWarningLogged) + { + _signVersionOneDeprecatedWarningLogged = true; + // Localization: Network.Http.SignVersionOneDeprecated - HTTP 签名仍使用 v1(仅时间戳)旧口径,不防篡改与重放,建议尽快迁移到 HttpSignVersion=2 + LogHelper.Warning(LocalizationService.GetString(Localization.Keys.NetworkHttp.SignVersionOneDeprecated)); + } + } }