From fcb77f00d6e14d47105df4ac0f849a5fabb43f04 Mon Sep 17 00:00:00 2001 From: samwaf Date: Sun, 27 Aug 2023 17:18:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=AD=A3=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=97=B6=E5=80=99=E4=B9=B1=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wafenginecore/wafengine.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/wafenginecore/wafengine.go b/wafenginecore/wafengine.go index a62cf6d..81c0bdb 100644 --- a/wafenginecore/wafengine.go +++ b/wafenginecore/wafengine.go @@ -478,7 +478,7 @@ func (waf *WafEngine) modifyResponse() func(*http.Response) error { reader := transform.NewReader(bodyReader, charset.NewDecoder()) oldBytes, err := io.ReadAll(reader) if err != nil { - zlog.Error("error", err) + zlog.Info("error", err) return nil } @@ -507,7 +507,7 @@ func (waf *WafEngine) modifyResponse() func(*http.Response) error { contentType = "css" } //图片情况 - if respContentType == "image/jpeg" || respContentType == "image/png" || + if respContentType == "image/jpeg" || respContentType == "image/png" || respContentType == "image/png; charset=utf-8" || respContentType == "image/gif" || respContentType == "image/x-icon" { contentType = "img" } @@ -530,7 +530,17 @@ func (waf *WafEngine) modifyResponse() func(*http.Response) error { //记录响应body if resp.Body != nil && resp.Body != http.NoBody && global.GCONFIG_RECORD_RESP == 1 { - resbodyByte, _ := io.ReadAll(resp.Body) + //编码转换,自动检测网页编码 + convertCntReader, _ := switchContentEncoding(resp) + bodyReader := bufio.NewReader(convertCntReader) + charset := determinePageEncoding(bodyReader) + + reader := transform.NewReader(bodyReader, charset.NewDecoder()) + resbodyByte, err := io.ReadAll(reader) + if err != nil { + zlog.Info("error", err) + return nil + } // 把刚刚读出来的再写进去,不然后面解析表单数据就解析不到了 resp.Body = io.NopCloser(bytes.NewBuffer(resbodyByte)) if resp.ContentLength < global.GCONFIG_RECORD_MAX_RES_BODY_LENGTH {