Compare commits

...

3 Commits

Author SHA1 Message Date
公明 127a5dd5c3 Update config.yaml 2026-03-10 09:12:58 +08:00
公明 f5f73d41c0 Add files via upload 2026-03-10 09:12:16 +08:00
公明 9811209002 Add files via upload 2026-03-10 00:28:33 +08:00
2 changed files with 19 additions and 9 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
# ============================================ # ============================================
# 前端显示的版本号(可选,不填则显示默认版本) # 前端显示的版本号(可选,不填则显示默认版本)
version: "v1.3.22" version: "v1.3.23"
# 服务器配置 # 服务器配置
server: server:
+18 -8
View File
@@ -596,15 +596,25 @@ func (h *RobotHandler) HandleWecomPOST(c *gin.Context) {
h.logger.Debug("企业微信 POST 收到请求", zap.String("body", string(bodyRaw))) h.logger.Debug("企业微信 POST 收到请求", zap.String("body", string(bodyRaw)))
// 验证请求签名防止伪造。企业微信签名算法同 URL 验证,使用 token、timestamp、nonce、 Encrypt 四个字段 // 验证请求签名防止伪造。企业微信签名算法同 URL 验证,使用 token、timestamp、nonce、 Encrypt 四个字段
if msgSignature != "" { // 若配置了 Token 则必须校验签名,避免未授权请求触发 Agent(防止平台被接管)
token := h.config.Robots.Wecom.Token
if token != "" {
if msgSignature == "" {
h.logger.Warn("企业微信 POST 缺少签名,已拒绝(需配置 token 并确保回调携带 msg_signature")
c.String(http.StatusOK, "")
return
}
var tmp wecomXML var tmp wecomXML
if err := xml.Unmarshal(bodyRaw, &tmp); err == nil { if err := xml.Unmarshal(bodyRaw, &tmp); err != nil {
expected := h.signWecomRequest(h.config.Robots.Wecom.Token, timestamp, nonce, tmp.Encrypt) h.logger.Warn("企业微信 POST 签名验证前解析 XML 失败", zap.Error(err))
if expected != msgSignature { c.String(http.StatusOK, "")
h.logger.Warn("企业微信 POST 签名验证失败", zap.String("expected", expected), zap.String("got", msgSignature)) return
c.String(http.StatusOK, "") }
return expected := h.signWecomRequest(token, timestamp, nonce, tmp.Encrypt)
} if expected != msgSignature {
h.logger.Warn("企业微信 POST 签名验证失败", zap.String("expected", expected), zap.String("got", msgSignature))
c.String(http.StatusOK, "")
return
} }
} }